LOR: so_snd_sx vs bufwait
Robert Watson
rwatson at FreeBSD.org
Thu Aug 27 11:34:04 UTC 2009
On Thu, 27 Aug 2009, pluknet wrote:
> This is a FreeBSD 9.0-CURRENT i386. The LOR was caught via stress2 suite. I
> guess sblock() (uipc_sockbuf.c:148 here) was called from sosend_generic()
> (which is at line uipc_socket.c:1436).
This is probably the "right" order, as opposed to the wrong one. Could you
look at witness's dynamic order information in DDB or via sysctl and see what
the "other" order is? Alternatively, hard-code this harder in subr_witness
and then the other order will be reported instead.
Robert N M Watson
Computer Laboratory
University of Cambridge
>
> lock order reversal:
> 1st 0xc836d5f4 so_snd_sx (so_snd_sx) @ /usr/src/sys/kern/uipc_sockbuf.c:148
> 2nd 0xd98e80dc bufwait (bufwait) @ /usr/src/sys/vm/vm_pager.c:311
> KDB: stack backtrace:
> db_trace_self_wrapper(c07fd8ea,e88376a8,c060a145,c05fac1b,c08008bf,...) at db_tr
> ace_self_wrapper+0x26
> kdb_backtrace(c05fac1b,c08008bf,c58ea8a8,c58e6ef8,e8837704,...) at kdb_backtrace
> +0x29
> _witness_debugger(c08008bf,d98e80dc,c0806261,c58e6ef8,c081a6b1,...) at _witness_
> debugger+0x25
> witness_checkorder(d98e80dc,9,c081a6b1,137,0,...) at witness_checkorder+0x839
> __lockmgr_args(d98e80dc,80000,0,0,0,...) at __lockmgr_args+0x7b7
> initpbuf(c0a046c0,0,c081a6b1,162,2,...) at initpbuf+0xe0
> getpbuf(c0a03f10,0,c0817667,47d,c07f8d78,...) at getpbuf+0x12f
> swap_pager_getpages(c65f5000,e8837914,2,1,e8837998,...) at swap_pager_getpages+0
> x201
> vm_fault(c64d1e80,28229000,1,0,28229090,...) at vm_fault+0xf7f
> trap_pfault(5,0,c0824a58,c0609eeb,c7885aa0,...) at trap_pfault+0xf9
> trap(e8837a90) at trap+0x473
> calltrap() at calltrap+0x6
> --- trap 0xc, eip = 0xc079f412, esp = 0xe8837ad0, ebp = 0xe8837b08 ---
> generic_copyin(c83c7018,10,e8837c58,1,0,...) at generic_copyin+0x32
> m_uiotombuf(e8837c58,2,37a0,0,0,...) at m_uiotombuf+0xf6
> sosend_generic(c836d4d4,0,e8837c58,0,0,...) at sosend_generic+0x432
> sosend(c836d4d4,0,e8837c58,0,0,...) at sosend+0x3f
> soo_write(c643d7e0,e8837c58,c5e62700,0,c716c480,...) at soo_write+0x63
> dofilewrite(e8837c58,ffffffff,ffffffff,0,c643d7e0,...) at dofilewrite+0x95
> kern_writev(c716c480,3,e8837c58,e8837c78,1,...) at kern_writev+0x58
> write(c716c480,e8837cf8,c,e8837cc8,c0846190,...) at write+0x4f
> syscall(e8837d38) at syscall+0x2b4
> Xint0x80_syscall() at Xint0x80_syscall+0x20
> --- syscall (4, FreeBSD ELF32, write), eip = 0x2818d2c3, esp = 0xbfbfe8bc, ebp =
> 0xbfbfe908 ---
>
> --
> wbr,
> pluknet
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
>
More information about the freebsd-current
mailing list