Closed
Description
System information
Type | Version/Name |
---|---|
Distribution Name | FreeBSD |
Distribution Version | 15-CURRENT |
Kernel Version | 15 |
Architecture | arm64, amd64 |
OpenZFS Version | 2.1.14 |
Describe the problem you're observing
Sometimes the system panics during shutdown with an assertion failure.
Four examples from different systems:
panic: VERIFY3(rc->rc_count == number) failed (262144 == 0)
panic: VERIFY3(rc->rc_count == number) failed (59392 == 0)
panic: VERIFY3(rc->rc_count == number) failed (232652800 == 0)
panic: VERIFY3(rc->rc_count == number) failed (872153088 == 0)
Describe how to reproduce the problem
Unload ZFS and get unlucky. It doesn't always happen, but it happens to more
people than just me. See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276341
Include any warning/errors/backtraces from the system logs
panic: VERIFY3(rc->rc_count == number) failed (262144 == 0)
cpuid = 0
time = 1705275564
KDB: stack backtrace:
db_trace_self() at db_trace_self
db_trace_self_wrapper() at db_trace_self_wrapper+0x38
vpanic() at vpanic+0x1a4
spl_panic() at spl_panic+0x44
zfs_refcount_destroy_many() at zfs_refcount_destroy_many+0xdc
arc_fini() at arc_fini+0x274
dmu_fini() at dmu_fini+0xc
spa_fini() at spa_fini+0x34
zfs_kmod_fini() at zfs_kmod_fini+0x78
zfs_shutdown() at zfs_shutdown+0x40
kern_reboot() at kern_reboot+0x574
sys_reboot() at sys_reboot+0x350
do_el0_sync() at do_el0_sync+0x58c
handle_el0_sync() at handle_el0_sync+0x48
--- exception, esr 0x56000000
[...]
#9 0xffff00000003daf8 in spl_panic (file=<optimized out>,
func=<optimized out>, line=13227925,
fmt=0x12 <error: Cannot access memory at address 0x12>)
at /usr/src/sys/contrib/openzfs/module/os/freebsd/spl/spl_misc.c:100
ap = {__stack = 0xffff0000f39d5630, __gr_top = 0xffff0000f39d55e0,
__vr_top = 0xffffa000010a92a0, __gr_offs = -32, __vr_offs = 0}
#10 0xffff0000001633e0 in zfs_refcount_destroy_many (rc=<optimized out>,
number=18446462598740100184)
at /usr/src/sys/contrib/openzfs/module/zfs/refcount.c:98
_verify3_right = 18446462598740100184
_verify3_left = 115
cookie = 0x0
ref = <optimized out>
#11 0xffff0000001633fc in zfs_refcount_destroy (rc=0x12,
rc@entry=0xffff0000010e7a80 <ARC_anon+128>)
at /usr/src/sys/contrib/openzfs/module/zfs/refcount.c:112
No locals.
#12 0xffff0000000c0508 in arc_state_fini ()
at /usr/src/sys/contrib/openzfs/module/zfs/arc.c:7421
No locals.
#13 arc_fini () at /usr/src/sys/contrib/openzfs/module/zfs/arc.c:7753
p = <optimized out>
#14 0xffff0000000ee4d0 in dmu_fini ()
at /usr/src/sys/contrib/openzfs/module/zfs/dmu.c:2549
No locals.
#15 0xffff000000189dd8 in spa_fini ()
at /usr/src/sys/contrib/openzfs/module/zfs/spa_misc.c:2549
No locals.
#16 0xffff0000001e67ac in zfs_kmod_fini ()
at /usr/src/sys/contrib/openzfs/module/zfs/zfs_ioctl.c:7933
zsnext = 0x0
zs = 0x0
#17 0xffff00000006e654 in zfs__fini ()
at /usr/src/sys/contrib/openzfs/module/os/freebsd/zfs/kmod_core.c:284
No locals.
#18 zfs_shutdown (arg=<optimized out>, howto=<optimized out>)
at /usr/src/sys/contrib/openzfs/module/os/freebsd/zfs/kmod_core.c:297
No locals.
#19 0xffff000000693158 in kern_reboot (howto=0)
at /usr/src/sys/kern/kern_shutdown.c:517
_ep = 0xffffa00002f63c40
_t = 0xffffa00002f63c40
_el = 0xffffa00001709c80
once = 1
#20 0xffff000000692b74 in sys_reboot (td=0xffff000121c2a640,
uap=0xffff000121c2aa40) at /usr/src/sys/kern/kern_shutdown.c:312
error = <optimized out>
#21 0xffff000000a60060 in syscallenter (td=0xffff000121c2a640)
at /usr/src/sys/arm64/arm64/../../kern/subr_syscall.c:186
se = 0xffff000000fa1378 <sysent+1760>
sa = 0xffff000121c2aa30
p = <optimized out>
error = <optimized out>
sy_thr_static = true
traced = <optimized out>
_audit_entered = <optimized out>
The call that failed is
zfs_refcount_destroy(&arc_anon->arcs_size[ARC_BUFC_DATA]);
I printed out the object being destroyed and nothing seemed wrong with it
except the count that should have been zero was not zero.
(kgdb) p ARC_anon.arcs_size[0]
$3 = {rc_count = 262144, rc_mtx = {lock_object = {lo_name = 0xffff000000c8d8f6 "rc->rc_mtx",
lo_flags = 577830912, lo_data = 0, lo_witness = 0x0}, sx_lock = 1}, rc_tree = {avl_root = 0x0,
avl_compar = 0xffff0000001630f0 <zfs_refcount_compare>, avl_offset = 0, avl_numnodes = 0},
rc_removed = {list_size = 48, list_offset = 0, list_head = {
list_next = 0xffff0000010e6ad8 <ARC_anon+216>, list_prev = 0xffff0000010e6ad8 <ARC_anon+216>}},
rc_removed_count = 0, rc_tracked = 0}
Note that sx_lock=1
is the correct value for a lock of this type when it is destroyed.
The links in the list point to the list object as I expect for an empty list.