Port-amd64 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: panic in dqflush



Edgar Fuß wrote:
> I just had a panic at dqflush+0x38 during a quotaoff(8) on 4.0/amd64.
> 
> The instruction is
>       cmp     %rdi,0x80(%rdx,%rax,8)
> and both rdx and rax ar zero.
> 
> The source seems to be
>       if (dq->dq_ump->um_quotas[dq->dq_type] != vp)
> and it looks to me like rdx is dq->dq_ump, rax is dq-dq_type and rdi is vp.
> Is this correct?

%rdx is the base, and 8*%rax is the index; to that, 0x80 is added.
dq_ump lives outside struct dquot, so that's possible. I'm a bit too
lazy to calculate the byte offset where um_quotas lives in struct
ufsmount, but it makes sense if it's at offset 0x80. um_quotas is an
array of pointers, so scale 8 also makes sense (on P64).

I'd put some Poor Man's Debugging panic()'s in dqflush, checking whether
dq is NULL, then dq_ump.

Cheers,
-- 
        Thomas E. Spanjaard
        tgen%netphreax.net@localhost
        tgen%deepbone.net@localhost

Attachment: signature.asc
Description: OpenPGP digital signature



Home | Main Index | Thread Index | Old Index