Messages in this thread | | | Subject | Re: 2.6.19-rc3-git7: scsi_device_unbusy: inconsistent lock state | From | Arjan van de Ven <> | Date | Mon, 30 Oct 2006 17:31:55 +0100 |
| |
> > > > > > [<c0219091>] cfq_set_request+0x351/0x3b0 > > [<c020c7fc>] elv_set_request+0x1c/0x40 > > [<c020fcff>] get_request+0x23f/0x270 > > [<c0210537>] get_request_wait+0x27/0x120 > > [<c02107ca>] __make_request+0x5a/0x350 > > [<c020f40f>] generic_make_request+0x16f/0x220 > > [<c02117e4>] submit_bio+0x64/0x110 > > > > now cfq_set_request() uses several inlines which muddies the situation, > > but lockdep claims one of them is not done correctly. (eg either it > > takes the lock incorrectly or something does spin_unlock_irq while the > > lock is held) > > It's not really inlined trickery, the trace is exactly as printed.
what I meant is that cfq_set_request() calls a few inlines that also take locks so it might be one of those instead
> A few > things may be allocated from that path, so we pass gfp_mask around. I'll > double check it tonight, but I don't currently see what could be wrong. > Would lockdep complain about: > > spin_lock_irqsave(lock, flags); > ... > spin_unlock_irq(lock); > ... > spin_lock_irq(lock); > ... > spin_unlock_irqrestore(lock, flags);
this is fine for lockdep IF and only IF there is no "out lock" held around this that requires irqs to be off. So if you do
spin_lock_irqsave(lock1, flags); ... spin_lock_irqsave(lock2, flags); spin_unlock_irq(lock2) ...
then lockdep WILL complain, and rightfully so, about a violation since lock1 gets violated here ;)
-- if you want to mail me at work (you don't), use arjan (at) linux.intel.com Test the interaction between Linux and your BIOS via http://www.linuxfirmwarekit.org
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |