panic: Lock so_rcv_sx not exclusively locked

Robert Watson rwatson at FreeBSD.org
Mon Jan 28 12:53:04 PST 2008


On Mon, 28 Jan 2008, Kip Macy wrote:

> Thanks for the bug report. It looks like this can probably be fixed by 
> simply not calling sbunlock if sblock failed.  I anticipate this being fixed 
> shortly.

It looks like the logic is in somewhat the wrong order in sorflush() -- likely 
we should be issuing socantrcvmore_locked() before sblock() in order to 
dislodge the threads currently using the socket/socket buffer, then perform a 
non-interruptible sblock() to wait for them to fall out.  However, it would be 
useful to confirm what the other threads are doing--most likely blocked on 
read, but I want to be sure.

Robert N M Watson
Computer Laboratory
University of Cambridge
>
>
> -Kip
>
>
> On Jan 28, 2008 10:08 AM, Jos Backus <jos at catnook.com> wrote:
>> Recent -current kernels can reliably be made to panic by killing npviewer.bin.
>> Right before killing, npviewer.bin shows up like this in top:
>>
>>  6288 jos           1  45    5 62844K 36788K so_rcv   0:08  0.00% npviewer.bin
>>
>> lizzy:~/crash% kgdb /usr/obj/usr/src/sys/LIZZY/kernel.debug vmcore.1
>> kgdb: kvm_nlist(_stopped_cpus):
>> kgdb: kvm_nlist(_stoppcbs):
>> [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"]
>> 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 "i386-marcel-freebsd".
>>
>> Unread portion of the kernel message buffer:
>> panic: Lock so_rcv_sx not exclusively locked @ /usr/src/sys/kern/uipc_sockbuf.c:157
>>
>> Uptime: 5h23m39s
>> Physical memory: 1527 MB
>> Dumping 247 MB: 232 216 200 184 168 152 136 120 104 88 72 56 40 24 8
>>
>> #0  doadump () at pcpu.h:195
>> 195     pcpu.h: No such file or directory.
>>         in pcpu.h
>> (kgdb) bt
>> #0  doadump () at pcpu.h:195
>> #1  0xc05435ef in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:417
>> #2  0xc0543867 in panic (fmt=Variable "fmt" is not available.
>> ) at /usr/src/sys/kern/kern_shutdown.c:571
>> #3  0xc054a427 in _sx_assert (sx=0xc4fb89a0, what=4,
>>     file=0xc06d49ca "/usr/src/sys/kern/uipc_sockbuf.c", line=157)
>>     at /usr/src/sys/kern/kern_sx.c:931
>> #4  0xc054a8da in _sx_xunlock (sx=0xc4fb89a0,
>>     file=0xc06d49ca "/usr/src/sys/kern/uipc_sockbuf.c", line=157)
>>     at /usr/src/sys/kern/kern_sx.c:316
>> #5  0xc0595444 in sbunlock (sb=0xc4fb8968)
>>     at /usr/src/sys/kern/uipc_sockbuf.c:157
>> #6  0xc0598245 in sorflush (so=0xc4fb8918)
>>     at /usr/src/sys/kern/uipc_socket.c:1902
>> #7  0xc05982df in soshutdown (so=0xc4fb8918, how=2)
>>     at /usr/src/sys/kern/uipc_socket.c:1866
>> #8  0xc059ce86 in shutdown (td=0xc4b31880, uap=0xe7219c58)
>>     at /usr/src/sys/kern/uipc_syscalls.c:1248
>> #9  0xc07ffa80 in ?? ()
>> #10 0xc4b31880 in ?? ()
>> #11 0xe7219c58 in ?? ()
>> #12 0x00000008 in ?? ()
>> #13 0x00000000 in ?? ()
>> #14 0x00000000 in ?? ()
>> #15 0xc103d800 in ?? ()
>> #16 0x00000c1e in ?? ()
>> #17 0x00000000 in ?? ()
>> #18 0xc4e25488 in ?? ()
>> #19 0xc5007e9c in ?? ()
>> #20 0x00000000 in ?? ()
>> #21 0x00000000 in ?? ()
>> #22 0xe7219c72 in ?? ()
>> #23 0x00000004 in ?? ()
>> #24 0x80000000 in ?? ()
>> #25 0xe7219c8c in ?? ()
>> ---Type <return> to continue, or q <return> to quit---
>> #26 0xc06a1a44 in __qdivrem (uq=Unhandled dwarf expression opcode 0x93
>> ) at /usr/src/sys/libkern/qdivrem.c:186
>> #27 0xc0697b93 in syscall (frame=0xe7219d38)
>>     at /usr/src/sys/i386/i386/trap.c:1034
>> #28 0xc06818b0 in Xint0x80_syscall () at /usr/src/sys/i386/i386/exception.s:203
>> #29 0x00000033 in ?? ()
>> Previous frame inner to this frame (corrupt stack?)
>> (kgdb)
>>
>>
>> --
>> Jos Backus
>> jos at catnook.com
>> _______________________________________________
>> 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"
>>
> _______________________________________________
> 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