(unknown charset) [geom, cam] Hang near end of kernel probes since r213267 (likely earlier)

From: (unknown charset) Andriy Gapon <avg_at_icyb.net.ua>
Date: Mon, 04 Oct 2010 10:44:18 +0300
on 04/10/2010 03:49 David Wolfskill said the following:
> db> bt 1
> Tracing pid 1 tid 100002 td 0xc91d6b40
> sched_switch(c91d6b40,0,104,191,a4bfdaac,...) at 0xc08cccec = sched_switch+0x3bc
> mi_switch(104,0,c0cccb89,1f3,68,...) at 0xc08af3a0 = mi_switch+0x200
> sleepq_switch(c91d6b40,0,c0cccb89,28b,0,...) at 0xc08e4b7b = sleepq_switch+0x15f
> sleepq_timedwait(c0e1fc24,69,c0cbe3e4,0,0,...) at 0xc08e4b7b = sleepq_timedwait+0x6b
> _sleep(c0e1fc24,c0e1fc28,68,c0cbe3e4,c8,...) at 0xc08af892 = _sleep+0x342
> g_waitidle(c0e21950,0,c0cd59c7,a2,29e,...) at 0xc083ee90 = g_waitidle+0xc0
> vfs_mountroot(c0e21950,4,c0cc12a9,2a0,0,...) at 0xc09378c8 = vfs_mountroot+0x98
> start_init(0,c6d76d28,c0cc3520,349,c91d3d48,...) at 0xc085f2b5 = start_init+0x65
> fork_exit(c085f250,0,c6d76d28) at 0xc087c3a8 = fork_exit+0xb8
> fork_trampoline() at 0xc0bd5824 = fork_trampoline+0x8
> --- trap 0, eip = 0, esp = 0xc6d76d60, ebp = 0 ---
> db> bt 2
> sched_switch(c922f000,0,104,191,d0c3a239,...) at 0xc08cccec = sched_switch+0x3bc
> mi_switch(104,0,c0cccb89,1f3,4c,...) at 0xc08af3a0 = mi_switch+0x200
> sleepq_switch(c922f000,0,c0cccb89,268,0,...) at 0xc08e3f6f = sleepq_switch+0x15f
> sleepq_wait(c959e7bc,4c,c0c644ec,0,0,...) at 0xc08e4c73 = sleepq_wait+0x63
> _sleep(c959e7bc,c9b31d74,4c,c0c644ec,0,...) at 0xc08af8c2 = _sleep+0x372
> cam_periph_getccb(c959e780,480,80246,c91462e0,c922f0a4,480) at 0xc04860af = cam_periph_getccb+0xaf
> cdgetccb(c0dc7914,c0c64915,c922f000,c0e00998,12d2,...) at 0xc0499e08 = cdgetccb+0xd8
> cdprevent(14c,c6d8db64,c04883ca,c0e00998,0,...) at 0xc049a602 = cdprevent+0c52
> cdcheckmedia(c959e780,14c,c0c659d6,bc,0,...) at 0xc049a6a9 = cdcheckmedia+0x19
> cdopen(c953aa00,4,c0cbdd7f,76,0,...) at 0xc049bb2d = cdopen+0xed
> g_disk_access(ca8c5e80,1,0,0,ca8c5ed8,...) at 0xc083ddcd = g_disk_access+0x11d
> g_access(ca8c5680,1,0,0,ca8c5ed8,...) at 0xc084365e = g_access+0x23e
> g_part_taste(c0dbcca0,ca8c5e80,0,228,ca8c5d80,...) at 0xc084a0a6 = g_part_taste+0xc6
> g_new_provider_event(ca8c5e80,0,c0cbe313,d9,c922f000,...) at 0xc0843316 = g_new_provider_event+0xb6
> g_run_events(c0e1fcd8,0,4c,c0ce99a5,64,...) at 0xc083f290 = g_run_events+0x3c0
> g_event_procbody(0,c6d8dd28,c0cc3520,349,c91d3550,...) at 0xc0840d8a = g_event_procbody+0x8a
> fork_exit(c0840d00,0,c6d8dd28) at 0xc087c3a8 = fork_exit+0xb8
> fork_trampoline() at 0xc0bd5824 = fork_trampoline+0x8
> --- trap 0, eip = 0, esp = 0xc6d8dd60, ebp = 0 ---

Interesting!
So, init thread is blocked in vfs_mountroot()->g_waitidle() waiting for geom to
complete probing cd device, but the latter is blocked in cam_periph_getccb()
waiting for a ccb.
Can you try to reproduce this again and examine other thread for anything
interesting in geom/cam department?  Thread named as "xpt_thrd" might be of
particular interest.

We urgently need geom and cam experts here :-)

-- 
Andriy Gapon
Received on Mon Oct 04 2010 - 05:45:04 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:08 UTC