Port-amd64 archive

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

Re: panic in dqflush

%rdx is the base, and 8*%rax is the index; to that, 0x80 is added.

I'm a bit too lazy to calculate the byte offset where um_quotas lives
in struct ufsmount
I just remembered the trick ws@ told me to calculate this quickly:
gdb netbsd.gdb
(gdb) print &((struct ufsmount *)0)->um_quotas
$1 = (struct vnode *(*)[2]) 0x80
(gdb) print &((struct dquot *)0)->dq_ump
$2 = (struct ufsmount **) 0x30
(gdb) print &((struct dquot *)0)->dq_type
$3 = (u_int16_t *) 0x22

I'd put some Poor Man's Debugging panic()'s in dqflush, checking whether
dq is NULL, then dq_ump.
I don't know of a way to reproduce the panic.
Also, that's the central file server (luckily it paniced on a sunday afternoon)
so I'm not in a mood to make it panic.

It appears to me that dq is in rcx (which is non-null), and dq- >dq_ump is
in rdx:
        mov 0x30(%rcx),%rdx
and rdx is null.
So we have an active dquot structure with a NULL mount.
I guess I'll have a look at the source code.

Home | Main Index | Thread Index | Old Index