unionfs/zfs panic

Nikos Vassiliadis nvass at gmx.com
Sun Dec 4 17:55:33 UTC 2016


Hi,

I got a panic while trying to use a zfs / unionfs combination for
jails. The following script can be used to reproduce the panic:
basejail=/jail

mkdir -p /tmp/i24420/n0
mkdir -p /tmp/i24420/upper/n0
mount_nullfs -o ro $basejail /tmp/i24420/n0
mount_unionfs -o noatime /tmp/i24420/upper/n0 /tmp/i24420/n0
mkdir -p /tmp/i24420/n1
mkdir -p /tmp/i24420/upper/n1
mount_nullfs -o ro $basejail /tmp/i24420/n1
mount_unionfs -o noatime /tmp/i24420/upper/n1 /tmp/i24420/n1
mkdir -p /tmp/i24420/n2
mkdir -p /tmp/i24420/upper/n2
mount_nullfs -o ro $basejail /tmp/i24420/n2
mount_unionfs -o noatime /tmp/i24420/upper/n2 /tmp/i24420/n2
mkdir -p /tmp/i24420/n3
mkdir -p /tmp/i24420/upper/n3
mount_nullfs -o ro $basejail /tmp/i24420/n3
mount_unionfs -o noatime /tmp/i24420/upper/n3 /tmp/i24420/n3

chroot /tmp/i24420/n0 rm -rv /var

Any ideas how to debug this further?

TIA,
Nikos

> panic: solaris assert: cnp->cn_namelen < sizeof(nm), file: /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c, line: 4945
>
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "amd64-marcel-freebsd"...
>
> Unread portion of the kernel message buffer:
> lock order reversal:
>  1st 0xfffff8000eb6b7c8 zfs (zfs) @ /usr/src/sys/kern/vfs_lookup.c:1080
>  2nd 0xfffff8000eba85f0 unionfs (unionfs) @ /usr/src/sys/modules/unionfs/../../fs/unionfs/union_subr.c:359
> stack backtrace:
> #0 0xffffffff80ac0ed0 at witness_debugger+0x70
> #1 0xffffffff80ac0dc4 at witness_checkorder+0xe54
> #2 0xffffffff80a381f2 at __lockmgr_args+0x4c2
> #3 0xffffffff828208ef at unionfs_noderem+0x19f
> #4 0xffffffff82825fd4 at unionfs_reclaim+0x14
> #5 0xffffffff810663b0 at VOP_RECLAIM_APV+0xe0
> #6 0xffffffff80b2901e at vgonel+0x20e
> #7 0xffffffff80b2955e at vrecycle+0x3e
> #8 0xffffffff82825fbc at unionfs_inactive+0x1c
> #9 0xffffffff81066250 at VOP_INACTIVE_APV+0xe0
> #10 0xffffffff80b27e56 at vinactive+0xc6
> #11 0xffffffff80b2839e at vputx+0x30e
> #12 0xffffffff80b31d41 at kern_rmdirat+0x1e1
> #13 0xffffffff80ef8d44 at amd64_syscall+0x314
> #14 0xffffffff80ed84ab at Xfast_syscall+0xfb
> panic: solaris assert: cnp->cn_namelen < sizeof(nm), file: /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c, line: 4945
> cpuid = 0
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00952092a0
> vpanic() at vpanic+0x182/frame 0xfffffe0095209320
> panic() at panic+0x43/frame 0xfffffe0095209380
> assfail() at assfail+0x1a/frame 0xfffffe0095209390
> zfs_freebsd_lookup() at zfs_freebsd_lookup+0x47/frame 0xfffffe00952094d0
> VOP_CACHEDLOOKUP_APV() at VOP_CACHEDLOOKUP_APV+0xda/frame 0xfffffe0095209500
> vfs_cache_lookup() at vfs_cache_lookup+0xd6/frame 0xfffffe0095209560
> VOP_LOOKUP_APV() at VOP_LOOKUP_APV+0xda/frame 0xfffffe0095209590
> relookup() at relookup+0xa1/frame 0xfffffe00952095f0
> unionfs_relookup() at unionfs_relookup+0xfa/frame 0xfffffe0095209650
> unionfs_remove() at unionfs_remove+0xc8/frame 0xfffffe0095209710
> VOP_REMOVE_APV() at VOP_REMOVE_APV+0xe0/frame 0xfffffe0095209740
> kern_unlinkat() at kern_unlinkat+0x208/frame 0xfffffe0095209930
> amd64_syscall() at amd64_syscall+0x314/frame 0xfffffe0095209ab0
> Xfast_syscall() at Xfast_syscall+0xfb/frame 0xfffffe0095209ab0
> --- syscall (10, FreeBSD ELF64, sys_unlink), rip = 0x80097915a, rsp = 0x7fffffffea58, rbp = 0x7fffffffeb20 ---
> KDB: enter: panic




> #0  doadump (textdump=-5) at pcpu.h:222
> 222     pcpu.h: No such file or directory.
>         in pcpu.h
> (kgdb) #0  doadump (textdump=-5) at pcpu.h:222
> #1  0xffffffff80397db6 in db_fncall (dummy1=<value optimized out>,
>     dummy2=<value optimized out>, dummy3=<value optimized out>,
>     dummy4=<value optimized out>) at /usr/src/sys/ddb/db_command.c:581
> #2  0xffffffff80397919 in db_command (cmd_table=<value optimized out>)
>     at /usr/src/sys/ddb/db_command.c:453
> #3  0xffffffff80397674 in db_command_loop ()
>     at /usr/src/sys/ddb/db_command.c:506
> #4  0xffffffff8039a72f in db_trap (type=<value optimized out>,
>     code=<value optimized out>) at /usr/src/sys/ddb/db_main.c:248
> #5  0xffffffff80aa2db3 in kdb_trap (type=<value optimized out>,
>     code=<value optimized out>, tf=<value optimized out>)
>     at /usr/src/sys/kern/subr_kdb.c:654
> #6  0xffffffff80ef7cc4 in trap (frame=0xfffffe00952091d0)
>     at /usr/src/sys/amd64/amd64/trap.c:537
> #7  0xffffffff80ed81c1 in calltrap ()
>     at /usr/src/sys/amd64/amd64/exception.S:236
> #8  0xffffffff80aa245b in kdb_enter (why=0xffffffff814339c1 "panic",
>     msg=0x80 <Address 0x80 out of bounds>) at cpufunc.h:63
> #9  0xffffffff80a609bf in vpanic (fmt=<value optimized out>,
>     ap=0xfffffe0095209360) at /usr/src/sys/kern/kern_shutdown.c:752
> #10 0xffffffff80a60a23 in panic (fmt=0xffffffff81c23810 "\004")
>     at /usr/src/sys/kern/kern_shutdown.c:690
> #11 0xffffffff825cb23a in assfail (a=<value optimized out>,
>     f=<value optimized out>, l=<value optimized out>)
>     at /usr/src/sys/cddl/compat/opensolaris/kern/opensolaris_cmn_err.c:81
> #12 0xffffffff8231f957 in zfs_freebsd_lookup (ap=0xfffffe0095209518)
>     at /usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c:4945
> #13 0xffffffff81063caa in VOP_CACHEDLOOKUP_APV (vop=<value optimized out>,
>     a=<value optimized out>) at vnode_if.c:195
> #14 0xffffffff80b12786 in vfs_cache_lookup (ap=<value optimized out>)
>     at vnode_if.h:80
> #15 0xffffffff81063b4a in VOP_LOOKUP_APV (vop=<value optimized out>,
>     a=<value optimized out>) at vnode_if.c:127
> #16 0xffffffff80b1c611 in relookup (dvp=0xfffff8000eb6ab10,
>     vpp=0xfffffe00952096c0, cnp=0xfffffe0095209680) at vnode_if.h:54
> #17 0xffffffff82820f9a in unionfs_relookup (dvp=0xfffff8000eb6ab10,
>     vpp=0xfffffe00952096c0, cnp=0xfffffe0095209890, cn=0xfffffe0095209680,
>     td=0xfffff8000e95e000, path=<value optimized out>, pathlen=10240,
>     nameiop=<value optimized out>)
>     at /usr/src/sys/modules/unionfs/../../fs/unionfs/union_subr.c:544
> #18 0xffffffff82824cf8 in unionfs_remove (ap=0xfffffe00952098e8)
>     at /usr/src/sys/modules/unionfs/../../fs/unionfs/union_vnops.c:992
> #19 0xffffffff810656d0 in VOP_REMOVE_APV (vop=<value optimized out>,
>     a=<value optimized out>) at vnode_if.c:1400
> #20 0xffffffff80b31ab8 in kern_unlinkat (td=<value optimized out>, fd=-100,
>     path=0x800e20748 <Address 0x800e20748 out of bounds>,
>     pathseg=UIO_USERSPACE, oldinum=<value optimized out>) at vnode_if.h:575
> #21 0xffffffff80ef8d44 in amd64_syscall (td=0xfffff8000e95e000, traced=0)
>     at subr_syscall.c:135
> #22 0xffffffff80ed84ab in Xfast_syscall ()
>     at /usr/src/sys/amd64/amd64/exception.S:396
> #23 0x000000080097915a in ?? ()
> Previous frame inner to this frame (corrupt stack?)
> Current language:  auto; currently minimal
> (kgdb)




More information about the freebsd-fs mailing list