Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 31 Oct 2009 15:30:04 GMT
From:      Gavin Atkinson <gavin@FreeBSD.org>
To:        freebsd-geom@FreeBSD.org
Subject:   Re: kern/139847: [geom_mbr] load/unload causes system to hang
Message-ID:  <200910311530.n9VFU40T099853@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/139847; it has been noted by GNATS.

From: Gavin Atkinson <gavin@FreeBSD.org>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/139847: [geom_mbr] load/unload causes system to hang
Date: Sat, 31 Oct 2009 15:28:11 +0000 (GMT)

 I can (accidentally) confirm that this bug exists. :-(
 
 FreeBSD rho.york.ac.uk 9.0-CURRENT FreeBSD 9.0-CURRENT #5: Mon Oct 19 
 20:34:46 BST 2009     root@rho.york.ac.uk:/usr/obj/usr/src/sys/RHO  i386
 
 "kldunload geom_mbr" hangs, with the backtrace below.  It hangs while 
 holding the GEOM topology lock and the kernel linker lock, which is 
 presumably the cause of the hang reported by the original submitter (which 
 I haven't witnessed yet but expect to soon...)
 
 KDB: enter: manual escape to debugger
 [thread pid 12 tid 100024 ]
 Stopped at      kdb_enter+0x3a: movl    $0,kdb_why
 db> tr 54907
 Tracing pid 54907 tid 100193 td 0xc5666690
 sched_switch(c5666690,0,104,191,7439752a,...) at sched_switch+0x418
 mi_switch(104,0,c0cb4ff6,1d6,4c,...) at mi_switch+0x200
 sleepq_switch(c5666690,0,c0cb4ff6,26e,0,...) at sleepq_switch+0x15f
 sleepq_timedwait(cac08280,4c,c0ca78f4,0,0,...) at sleepq_timedwait+0x6b
 _sleep(cac08280,0,4c,c0ca78f4,3e8,...) at _sleep+0x339
 g_waitfor_event(c08413f0,c5105090,2,0,ca656980,...) at g_waitfor_event+0x9c
 g_modevent(ca656980,1,cb8a6440,109,0,...) at g_modevent+0x14f
 module_unload(ca656980,c0cad345,274,271,c0884be6,...) at module_unload+0x43
 linker_file_unload(c62b4000,0,c0cad345,42c,cb8a3000,...) at linker_file_unload+0x15e
 kern_kldunload(c5666690,a,0,e79dcd2c,c0be0953,...) at kern_kldunload+0xd5
 kldunloadf(c5666690,e79dccf8,8,c0cb7d91,c0d9f210,...) at kldunloadf+0x2b
 syscall(e79dcd38) at syscall+0x2d3
 Xint0x80_syscall() at Xint0x80_syscall+0x20
 --- syscall (444, FreeBSD ELF32, kldunloadf), eip = 0x280d62fb, esp = 
 0xbfbfe48c, ebp = 0xbfbfecd8 ---
 db>
 db> sh alllocks
 Process 58972 (procstat) thread 0xc53ee8c0 (100089)
 shared sx sysctl lock (sysctl lock) r = 0 (0xc0e25844) locked @ 
 /usr/src/sys/kern/kern_sysctl.c:1521
 Process 54907 (kldunload) thread 0xc5666690 (100193)
 exclusive sx kernel linker (kernel linker) r = 0 (0xc0e23f98) locked @ 
 /usr/src/sys/kern/kern_linker.c:1068
 Process 2 (g_event) thread 0xc4e07000 (100011)
 exclusive sx GEOM topology (GEOM topology) r = 0 (0xc0e23508) locked @ 
 /usr/src/sys/geom/geom_event.c:185
 Process 12 (intr) thread 0xc4e07d20 (100024)
 exclusive sleep mutex Giant (Giant) r = 1 (0xc0e25130) locked @ 
 /usr/src/sys/dev/usb/usb_transfer.c:2954
 db>
 
 (Giant held by USB due to escaping to debugger via USB keyboard.  The 
 sysctl lock is held because I ran "procstat -kk" on the kldunload process, 
 which also wedged waiting for the kernel linker lock.)
 
 Gavin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200910311530.n9VFU40T099853>