[BLOCK] Fix bad sharing of tag busy list on queues with shared tag maps
authorJens Axboe <jens.axboe@oracle.com>
Thu, 25 Oct 2007 08:14:47 +0000 (10:14 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Mon, 29 Oct 2007 10:33:06 +0000 (11:33 +0100)
commit6eca9004dfcb274a502438a591df5b197690afb1
treefd281ef7c016fbae03e2a27e42a53efd37c3ec63
parent3a424f2d56613acfb9e583ec9c85a2be3e3af028
[BLOCK] Fix bad sharing of tag busy list on queues with shared tag maps

For the locking to work, only the tag map and tag bit map may be shared
(incidentally, I was just explaining this to Nick yesterday, but I
apparently didn't review the code well enough myself). But we also share
the busy list!  The busy_list must be queue private, or we need a
block_queue_tag covering lock as well.

So we have to move the busy_list to the queue. This'll work fine, and
it'll actually also fix a problem with blk_queue_invalidate_tags() which
will invalidate tags across all shared queues. This is a bit confusing,
the low level driver should call it for each queue seperately since
otherwise you cannot kill tags on just a single queue for eg a hard
drive that stops responding. Since the function has no callers
currently, it's not an issue.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/ll_rw_blk.c
include/linux/blkdev.h