Re: various vfs LORs

From: Rick C. Petty <rick-freebsd2008_at_kiwi-computer.com>
Date: Wed, 19 Aug 2009 12:50:29 -0500
On Wed, Aug 19, 2009 at 06:00:31PM +0100, Bruce Cran wrote:

> On Wed, Aug 19, 2009 at 11:18:17AM -0500, Rick C. Petty wrote:
>
> > Upon every restart, I see a few LORs.  I couldn't find PRs for any of them.
> > See attached dmesg below.  Should I submit a PR for each of them or one PR
> > for all five?
>
> You should check http://sources.zabbadoz.net/freebsd/lor.html first
> before submitting PRs, to see if they're known.

Thanks, I'll update my post accordingly...

> % uname -a
> FreeBSD myhost 8.0-BETA2 FreeBSD 8.0-BETA2 #4 r196381M: Wed Aug 19 10:06:03 CDT 2009     root_at_myhost:/usr/obj/usr/src/sys/GENERIC  amd64

<snip>

This is LOR #280 with slightly different line numbers and backtrace:

> lock order reversal:
>  1st 0xffffff0002e48620 ufs (ufs) _at_ /usr/src/sys/kern/vfs_mount.c:1200
>  2nd 0xffffff0002e48d80 devfs (devfs) _at_ /usr/src/sys/kern/vfs_subr.c:2083
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2a
> _witness_debugger() at _witness_debugger+0x2e
> witness_checkorder() at witness_checkorder+0x81e
> __lockmgr_args() at __lockmgr_args+0xcf3
> vop_stdlock() at vop_stdlock+0x39
> VOP_LOCK1_APV() at VOP_LOCK1_APV+0x9b
> _vn_lock() at _vn_lock+0x47
> vget() at vget+0x7b
> devfs_allocv() at devfs_allocv+0x100
> devfs_root() at devfs_root+0x48
> vflush() at vflush+0x4c
> devfs_unmount() at devfs_unmount+0x46
> dounmount() at dounmount+0x2e6
> unmount() at unmount+0x27e
> syscall() at syscall+0x1af
> Xfast_syscall() at Xfast_syscall+0xe1
> --- syscall (22, FreeBSD ELF64, unmount), rip = 0x8006a09ec, rsp = 0x7fffffffe248, rbp = 0 ---

LOR #261 was already reported:

> lock order reversal:
>  1st 0xffffff80a51147e8 bufwait (bufwait) _at_ /usr/src/sys/kern/vfs_bio.c:2559
>  2nd 0xffffff000439b400 dirhash (dirhash) _at_ /usr/src/sys/ufs/ufs/ufs_dirhash.c:285

This LOR doesn't seem to be reported anywhere:

> lock order reversal:
>  1st 0xffffff00046de7f8 nfs (nfs) _at_ /usr/src/sys/kern/vfs_syscalls.c:4097
>  2nd 0xffffff80a5129968 bufwait (bufwait) _at_ /usr/src/sys/kern/vfs_bio.c:1835
>  3rd 0xffffff00046de620 nfs (nfs) _at_ /usr/src/sys/nfsclient/nfs_node.c:161
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2a
> _witness_debugger() at _witness_debugger+0x2e
> witness_checkorder() at witness_checkorder+0x81e
> __lockmgr_args() at __lockmgr_args+0xcf3
> nfs_nget() at nfs_nget+0x1c9
> nfs_readdirplusrpc() at nfs_readdirplusrpc+0x7cc
> nfs_doio() at nfs_doio+0x617
> nfs_bioread() at nfs_bioread+0xa9f
> nfs_readdir() at nfs_readdir+0x85
> kern_getdirentries() at kern_getdirentries+0x12e
> getdirentries() at getdirentries+0x23
> syscall() at syscall+0x1af
> Xfast_syscall() at Xfast_syscall+0xe1
> --- syscall (196, FreeBSD ELF64, getdirentries), rip = 0x8009d11dc, rsp = 0x7fffffffc3a8, rbp = 0x1 ---

This one has not been reported either:

> lock order reversal:
>  1st 0xffffff000412b270 syncer (syncer) _at_ /usr/src/sys/kern/vfs_subr.c:1693
>  2nd 0xffffff00043e6098 ufs (ufs) _at_ /usr/src/sys/kern/vfs_subr.c:2083
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2a
> _witness_debugger() at _witness_debugger+0x2e
> witness_checkorder() at witness_checkorder+0x81e
> __lockmgr_args() at __lockmgr_args+0xcf3
> ffs_lock() at ffs_lock+0x8c
> VOP_LOCK1_APV() at VOP_LOCK1_APV+0x9b
> _vn_lock() at _vn_lock+0x47
> vget() at vget+0x7b
> vfs_msync() at vfs_msync+0xa3
> sync_fsync() at sync_fsync+0x12a
> sync_vnode() at sync_vnode+0x157
> sched_sync() at sched_sync+0x1d1
> fork_exit() at fork_exit+0x12a
> fork_trampoline() at fork_trampoline+0xe
> --- trap 0, rip = 0, rsp = 0xffffff80e7b74d30, rbp = 0 ---

This one is not an LOR but should probably be investigated nonetheless:

> acquiring duplicate lock of same type: "ftlk"
>  1st ftlk _at_ /usr/src/sys/modules/linux/../../compat/linux/linux_futex.c:177
>  2nd ftlk _at_ /usr/src/sys/modules/linux/../../compat/linux/linux_futex.c:203
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2a
> _witness_debugger() at _witness_debugger+0x2e
> witness_checkorder() at witness_checkorder+0x8ef
> _sx_xlock() at _sx_xlock+0x55
> futex_get0() at futex_get0+0xfe
> linux_sys_futex() at linux_sys_futex+0x96
> ia32_syscall() at ia32_syscall+0x19c
> Xint0x80_syscall() at Xint0x80_syscall+0x95
> --- syscall (240, Linux ELF32, linux_sys_futex), rip = 0x28799533, rsp = 0xffffaecc, rbp = 0x4000001 ---


-- Rick C. Petty
Received on Wed Aug 19 2009 - 15:50:31 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:54 UTC