From owner-freebsd-current@FreeBSD.ORG Tue Jun 29 06:14:21 2010 Return-Path: Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 87C551065670 for ; Tue, 29 Jun 2010 06:14:21 +0000 (UTC) (envelope-from keramida@ceid.upatras.gr) Received: from igloo.linux.gr (igloo.linux.gr [62.1.205.36]) by mx1.freebsd.org (Postfix) with ESMTP id 185CB8FC20 for ; Tue, 29 Jun 2010 06:14:20 +0000 (UTC) X-Spam-Status: No X-Hellug-MailScanner-From: keramida@ceid.upatras.gr X-Hellug-MailScanner-SpamCheck: not spam, SpamAssassin (not cached, score=-0.2, required 5, autolearn=not spam, ALL_TRUSTED -1.00, BAYES_50 0.80) X-Hellug-MailScanner: Found to be clean X-Hellug-MailScanner-ID: o5T6E0k9019923 Received: from kobe.laptop (178.128.137.140.dsl.dyn.forthnet.gr [178.128.137.140]) (authenticated bits=128) by igloo.linux.gr (8.14.3/8.14.3/Debian-9.1) with ESMTP id o5T6E0k9019923 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 29 Jun 2010 09:14:07 +0300 Received: from kobe.laptop (kobe.laptop [127.0.0.1]) by kobe.laptop (8.14.4/8.14.4) with ESMTP id o5T6DsLb013991 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 29 Jun 2010 09:13:54 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Received: (from keramida@localhost) by kobe.laptop (8.14.4/8.14.4/Submit) id o5T6DsTD013986; Tue, 29 Jun 2010 09:13:54 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) From: Giorgos Keramidas To: mjacob@FreeBSD.org Date: Tue, 29 Jun 2010 09:13:54 +0300 Message-ID: <871vbq74d9.fsf@kobe.laptop> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: freebsd-current@FreeBSD.org Subject: lock recursion panic in cam_xpt.c X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Jun 2010 06:14:21 -0000 A recent CURRENT build from /head @ 209581 panics when I run "cdrecord -scanbus" with the attached backtrace. The culprit seems to be the extra call fo xpt_lock_buses() added in head rev 208752, but I'm not sure if this is the real cause yet. --- a/sys/cam/cam_xpt.c Wed Jun 02 17:27:23 2010 +0000 +++ b/sys/cam/cam_xpt.c Wed Jun 02 18:06:32 2010 +0000 @@ -2138,6 +2138,7 @@ xptpdperiphtraverse(struct periph_driver retval = 1; + xpt_lock_buses(); for (periph = (start_periph ? start_periph : TAILQ_FIRST(&(*pdrv)->units)); periph != NULL; periph = next_periph) { @@ -2145,9 +2146,12 @@ xptpdperiphtraverse(struct periph_driver next_periph = TAILQ_NEXT(periph, unit_links); retval = tr_func(periph, arg); - if (retval == 0) + if (retval == 0) { + xpt_unlock_buses(); return(retval); + } } + xpt_unlock_buses(); return(retval); } With a kernel built from /head when "cdrecord -scanbus" runs, an instant mutex recursion & panic happens at... ------------------------------------------------------------------------ Unread portion of the kernel message buffer: panic: _mtx_lock_sleep: recursed on non-recursive mutex XPT topology lock @ /usr/src/sys/cam/cam_xpt.c:4814 cpuid = 0 Uptime: 12m51s Physical memory: 3034 MB Dumping 178 MB: 163 147 131 115 99 83 67 51 35 19 3 Reading symbols from /boot/kernel/geom_eli.ko...Reading symbols from /boot/kernel/geom_eli.ko.symbols...done. done. Loaded symbols for /boot/kernel/geom_eli.ko Reading symbols from /boot/kernel/crypto.ko...Reading symbols from /boot/kernel/crypto.ko.symbols...done. done. Loaded symbols for /boot/kernel/crypto.ko Reading symbols from /boot/kernel/zlib.ko...Reading symbols from /boot/kernel/zlib.ko.symbols...done. done. Loaded symbols for /boot/kernel/zlib.ko Reading symbols from /boot/kernel/if_iwn.ko...Reading symbols from /boot/kernel/if_iwn.ko.symbols...done. done. Loaded symbols for /boot/kernel/if_iwn.ko Reading symbols from /boot/kernel/snd_hda.ko...Reading symbols from /boot/kernel/snd_hda.ko.symbols...done. done. Loaded symbols for /boot/kernel/snd_hda.ko Reading symbols from /boot/kernel/sound.ko...Reading symbols from /boot/kernel/sound.ko.symbols...done. done. Loaded symbols for /boot/kernel/sound.ko Reading symbols from /boot/kernel/acpi_ibm.ko...Reading symbols from /boot/kernel/acpi_ibm.ko.symbols...done. done. Loaded symbols for /boot/kernel/acpi_ibm.ko Reading symbols from /boot/kernel/nullfs.ko...Reading symbols from /boot/kernel/nullfs.ko.symbols...done. done. Loaded symbols for /boot/kernel/nullfs.ko Reading symbols from /boot/kernel/snake_saver.ko...Reading symbols from /boot/kernel/snake_saver.ko.symbols...done. done. Loaded symbols for /boot/kernel/snake_saver.ko #0 doadump () at pcpu.h:231 231 pcpu.h: No such file or directory. in pcpu.h (kgdb) #0 doadump () at pcpu.h:231 #1 0x8068f66e in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:416 #2 0x8068f942 in panic (fmt=Variable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:590 #3 0x8067fe2a in _mtx_lock_sleep (m=0x80a83c98, tid=2272695552, opts=0, file=0x809b2014 "/usr/src/sys/cam/cam_xpt.c", line=4814) at /usr/src/sys/kern/kern_mutex.c:341 #4 0x80680047 in _mtx_lock_flags (m=0x80a83c98, opts=0, file=0x809b2014 "/usr/src/sys/cam/cam_xpt.c", line=4814) at /usr/src/sys/kern/kern_mutex.c:203 #5 0x8046abaa in xpt_lock_buses () at /usr/src/sys/cam/cam_xpt.c:4814 #6 0x8046ac14 in xptpdperiphtraverse (pdrv=0x86649640, start_periph=0x0, tr_func=0x8046b8b0 , arg=0x87682000) at /usr/src/sys/cam/cam_xpt.c:2151 #7 0x8046acd8 in xptplistpdrvfunc (pdrv=0x86649640, arg=0x87682000) at /usr/src/sys/cam/cam_xpt.c:1840 #8 0x8046a88c in xptpdrvtraverse (start_pdrv=Variable "start_pdrv" is not available. ) at /usr/src/sys/cam/cam_xpt.c:2132 #9 0x8047062c in xpt_action_default (start_ccb=0x87682000) at /usr/src/sys/cam/cam_xpt.c:1967 #10 0x8046a9b2 in xpt_action (start_ccb=0x87682000) at /usr/src/sys/cam/cam_xpt.c:2331 #11 0x8046ca36 in xptioctl (dev=0x87214e00, cmd=3294893314, addr=0x87682000 "\177\004", flag=3, td=0x87769500) at /usr/src/sys/cam/cam_xpt.c:598 #12 0x8060f6b8 in devfs_ioctl_f (fp=0x877bb8c0, com=3294893314, data=0x87682000, cred=0x872ad780, td=0x87769500) at /usr/src/sys/fs/devfs/devfs_vnops.c:669 #13 0x806dab5d in kern_ioctl (td=0x87769500, fd=3, com=3294893314, data=0x87682000 "\177\004") at file.h:254 #14 0x806dace4 in ioctl (td=0x87769500, uap=0x9aa55cec) at /usr/src/sys/kern/sys_generic.c:678 #15 0x806cff26 in syscallenter (td=0x87769500, sa=0x9aa55ce4) at /usr/src/sys/kern/subr_trap.c:314 #16 0x80953964 in syscall (frame=0x9aa55d28) at /usr/src/sys/i386/i386/trap.c:1060 #17 0x8093afc1 in Xint0x80_syscall () at /usr/src/sys/i386/i386/exception.s:264 #18 0x00000033 in ?? () Previous frame inner to this frame (corrupt stack?) (kgdb) ------------------------------------------------------------------------