On Tue, 30 Sep 2008, Kiyoshi Ueda wrote: > I think you should use blk_end_request(req, -EIO, blk_rq_bytes(rq)) > here instead of end_dequeued_request(req, -EIO). > > end_dequeued_request() needs to be called with queue lock held, > but I can't see any queue lock in your patches. > Also, if you add the queue lock and still use end_dequeued_request(), > __end_that_request_first(), which completes BIOs in the request, > is called with the queue lock held, though it doesn't require queue > lock actually. So that might cause some performance regressions. Thanks for your comments. It sure would be nice if the locking requirements of the block layer were documented properly! The only description appears to be in a comment in include/linux/blkdev.h, and it is woefully incomplete. (There also appear to be far too many redundant entry points, but never mind that...) I'll update the patch as you suggest. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html