Messages in this thread | | | Date | Sun, 3 Aug 2003 12:08:37 +0200 | From | Jens Axboe <> | Subject | Re: IDE locking problem |
| |
On Sun, Aug 03 2003, Jens Axboe wrote: > On Sun, Aug 03 2003, Benjamin Herrenschmidt wrote: > > Hi Alan & Bart ! > > > > While fixing my hotswap media-bay IDE controller for 2.6, I found > > a locking problem with IDE (again ? :) in ide_unregister_hw. Basically > > the problem is that it calls blk_cleanup_queue(), which is unsafe to > > call with a lock held (it will call flush_workqueue() at one point). > > Other side effect, flush_workqueue() will re-enable IRQs, thus allowing > > us to get an IRQ while holding the spinlock -> double lock, but that's > > just a side effect of calling flush_workqueue in that context. > > Irk someone made blk_cleanup_queue() non-atomic. I blame Andrew. And now > it looks like it's impossible to make it atomic again :/. Not very nice, > imo it's preferable to keep such unregister functions atomic. > > > So the call to blk_cleanup_queue() shall be moved outside of the > > spinlock. I don't know much about the BIO details, is it possible > > to first unregister_blkdev, then only call blk_cleanup_queue() ? That > > That should work, yes. > > > would help making sure we don't get a request sneaking in ? > > Hmm not really, there's still a chance that could happen.
and unregister_blkdev() itself isn't even atomic. So I guess IDE does need fixing anyways.
-- Jens Axboe
- 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/
| |