[Bug 234296] FreeBSD 12.0-STABLE r342216 Fatal trap 12
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Thu Jan 10 19:22:24 UTC 2019
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234296
--- Comment #7 from Mark Johnston <markj at FreeBSD.org> ---
I looked at the kernel dumps. In all three cases, we crashed while processing
a callout that had been mostly zeroed out. However, in all cases, at offset
0x10 into the callout there is a pointer in the direct map. Following that
pointer leads me to the middle of a ZFS vnode:
(kgdb) frame 9
#9 0xffffffff805dd328 in callout_process (now=91167878320709) at
/usr/src/sys/kern/kern_timeout.c:510
510 LIST_REMOVE(tmp, c_links.le);
(kgdb) p/x *cc->cc_callwheel[firstb & callwheelmask].lh_first
$21 = {
c_links = {
le = {
le_next = 0x0,
le_prev = 0x0
},
sle = {
sle_next = 0x0
},
tqe = {
tqe_next = 0x0,
tqe_prev = 0x0
}
},
c_time = 0xfffff803773850c0,
c_precision = 0x0,
c_arg = 0x0,
c_func = 0x0,
c_lock = 0x0,
c_flags = 0x0,
c_iflags = 0x0,
c_cpu = 0x0
}
(kgdb) x/32g 0xfffff803773850c0
0xfffff803773850c0: 0x0000000000000000 0xfffff8000a161de0
0xfffff803773850d0: 0xffffffff809bf965 0x0000000005230000
0xfffff803773850e0: 0x0000000000000000 0x0000000000000001
0xfffff803773850f0: 0xffffffff80c96170 0xfffff80463b90100
0xfffff80377385100: 0x0000000000000000 0x0000000000000000
0xfffff80377385110: 0xfffff80377385000 0x0000000000000000
0xfffff80377385120: 0xfffff80377385118 0x0000000000000000
0xfffff80377385130: 0x0000000000000000 0x0000000000000000
0xfffff80377385140: 0xfffff80377385138 0x0000000000000000
0xfffff80377385150: 0x0000000000000000 0x0000000000000000
0xfffff80377385160: 0x0000000300000000 0x0000000000020000
0xfffff80377385170: 0x0000000000000000 0x0000000000000000
0xfffff80377385180: 0x0000000000000000 0x0000000000000000
0xfffff80377385190: 0xfffff80377385188 0x0000000000000000
0xfffff803773851a0: 0x0000000000000000 0x0000000000000000
0xfffff803773851b0: 0x0000000000000000 0x0000000200000000
0xffffffff809bf965 is a pointer to the string "bufobj interlock".
So the pointer in this callout is to the v_actfreelist member
of a vnode. Indeed, 0xfffff803773850c0 & ~0xff is a pointer to
a ZFS vnode. So, the pointer in the callout structure is probably
the prev pointer, which means the callout structure is actually
embedded in a vnode.
(kgdb) p *(struct vnode * )((uintptr_t)$23 & ~0xff)
$24 = {
v_tag = 0x0,
v_op = 0x0,
v_data = 0x0,
v_mount = 0xfffff8000a3fb000,
v_nmntvnodes = {
tqe_next = 0x0,
tqe_prev = 0x0
},
...
v_vnlock = 0x0,
v_actfreelist = {
tqe_next = 0x0,
tqe_prev = 0xfffff803773850c0
},
...
v_iflag = 0,
v_vflag = 0,
v_mflag = 0,
v_writecount = 0,
v_hash = 0,
v_type = VMARKER
}
So the only non-zero fields are those of a marker
vnode initialized in __mnt_vnode_first_active(). Those
vnodes are allocated using malloc(), not the vnode zone.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list