Re: LOR: so_snd _at_ /usr/src/sys/kern/uipc_coket.c:780

From: John Baldwin <jhb_at_freebsd.org>
Date: Tue, 29 Nov 2005 16:29:07 -0500
On Tuesday 29 November 2005 03:08 pm, Mark Atkinson wrote:
> this one seems new, and doesn't seem to match anything on the known
> list.  Typed by hand.  Single processor, no hyperthreading.  The last
> thing it was doing was doing a 'test' command on a file over nfs.
>
> Lock order reversal:
> 1st 0xc5ef0ec so_snd (so_snd) _at_ /usr/src/sys/kern/uipc_socket.c:780
> 2nd 0xc0ac15ec tcp (tcp) _at_ /usr/src/sys/netinet/tcp_usrreq.c:580
> KDB: stack backstrace:
> kdb_backtrace() at kdb_backtrace+0x2e
> witness_checkorder() at witness_checkorder+0x6d3
> _mtx_lock_flags() at _mtx_lock_flags+0x8a
> tcp_usr_shutdown() at tcp_usr_shutdown+0x3d
> soshutdown() at soshutdown+0x41
> nfs_disconnect() at nfs_disconnect+0xd5
> nfs_reconnect() at nfs_reconnect+0x1c
> nfs_reply() at nfs_reply+0x170
> nfs_request() at nfs_request+0x451
> nfs3_access_otw() at nfs3_access_otw+0xde
> nfs_access() at nfs_access+0x120
> VOP_ACCESS_APV() at VOP_ACCESS_APV+0xac
> nfs_lookup() at nfs_lookup+0xe5
> VOP_LOOKUP_APV() at VOP_LOOKUP_APV+0xb4
> lookup() at lookup+0x468
> namei() at namei+0x468
> kern_stat() at kern_stat+0x3d
> stat() at stat+0x2f
> syscall() at Xint0x80_syscall+0x1f
> --- syscall (188, FreeBSD ELF32, stat, eip = 0x2819ad63, esp =
> 0xbfbfe8cc, ebp = 0xbfbfe9c8 ---
> panic: _mtx_lock_sleep: recursed on non-recursive mutex so_snd _at_
> /usr/src/sys/kern/uipc_socket.c:391
>
> cpuid = 0
> KDB: enter: panic
> Stopped at 	kdb_enter+0x30: leave
> db>
> db> show alllocks
> Process 54517 (sh) thread 0xc5f1fd80 (100100)
> exclusive sleep mutex so_snd r = 0 (0xc5aef0ec) locked _at_
> /usr/src/sys/kern/uipc_socket.c:780
> exclusive sleep mutex Giant r = 0 (0xc0a713c0) locked _at_
> /usr/src/sys/kern/vfs_lookup.c:619
> Process 54515 (cc1) thread 0xc5eac600 (100093)
> exclusive sx user map r = 0 (0xc5fa2170) locked _at_
> /usr/src/sys/vm/vm_map:2996

Try this patch:

Index: uipc_socket.c
===================================================================
RCS file: /usr/cvs/src/sys/kern/uipc_socket.c,v
retrieving revision 1.254
diff -u -r1.254 uipc_socket.c
--- uipc_socket.c       28 Nov 2005 21:45:36 -0000      1.254
+++ uipc_socket.c       29 Nov 2005 21:28:16 -0000
_at__at_ -716,7 +716,7 _at__at_
 }

 #define        SBLOCKWAIT(f)   (((f) & MSG_DONTWAIT) ? M_NOWAIT : M_WAITOK)
-#define        snderr(errno)   { error = (errno); goto out; }
+#define        snderr(errno)   { error = (errno); goto release; }

 /*
  * Send on a socket.

-- 
John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
Received on Tue Nov 29 2005 - 20:29:45 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:48 UTC