NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/46462: Hang trying to run a disklabel on an inserted USB flash drive
The following reply was made to PR kern/46462; it has been noted by GNATS.
From: Manuel Bouyer <bouyer%antioche.eu.org@localhost>
To: Mindaugas Rasiukevicius <rmind%NetBSD.org@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, kern-bug-people%NetBSD.org@localhost,
gnats-admin%NetBSD.org@localhost,
netbsd-bugs%NetBSD.org@localhost, cyber%NetBSD.org@localhost
Subject: Re: kern/46462: Hang trying to run a disklabel on an inserted USB
flash drive
Date: Mon, 21 May 2012 14:45:47 +0200
On Sat, May 19, 2012 at 08:29:03PM +0100, Mindaugas Rasiukevicius wrote:
> OK, this thread is likely a problem:
>
> > db> tr/t 0.59
> > trace: pid 0 lid 59 at 0xffffa00049c1b770
> > sleepq_block() at netbsd:sleepq_block+0xdd
> > cv_wait() at netbsd:cv_wait+0xf1
> > biowait() at netbsd:biowait+0x4f
> > read_sector() at netbsd:read_sector+0x23
> > scan_mbr() at netbsd:scan_mbr+0x40
> > readdisklabel() at netbsd:readdisklabel+0xfb
> > sdopen() at netbsd:sdopen+0x26a
> > spec_open() at netbsd:spec_open+0x29a
> > VOP_OPEN() at netbsd:VOP_OPEN+0x29
> > dkwedge_discover() at netbsd:dkwedge_discover+0xee
> > sdattach() at netbsd:sdattach+0x206
> > config_attach_loc() at netbsd:config_attach_loc+0x15a
> > scsi_probe_bus() at netbsd:scsi_probe_bus+0x4aa
> > scsibus_config() at netbsd:scsibus_config+0x5d
> > scsipi_completion_thread() at netbsd:scsipi_completion_thread+0x23
>
> - scsipi_completion_thread()
> This asynchronous completion thread handles the event, which is
> in this case attaching of a new device. Callbacks are performed
> under splbio().
>
> -- [skipping] .. sdopen()
> Acquiring sd->sc_dk.dk_openlock here. We are still at IPL_BIO.
>
> --- [skipping] .. read_sector() -> disk_read_sectors()
> Invoking sdstrategy() and entering biowait(). However, since
> we are still at IPL_BIO, biodone() does not happen - thread has
> deadlocked against interrupt with sd->sc_dk.dk_openlock held.
I don't understand how you get to this conclusion. biowait() will cause the
thread to sleep, and IPL_BIO interrupts will be accepted again while
it sleeps. Otherwise, all IPL_VM and lower interrupts would be blocked,
which would probably cause not only disklabel to hang, but most probably
the complete system.
I guess the problem is more that the USB I/O doesn't completes for some
reason.
--
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
NetBSD: 26 ans d'experience feront toujours la difference
--
Home |
Main Index |
Thread Index |
Old Index