• Jens Axboe's avatar
    BLOCK: Fix bad sharing of tag busy list on queues with shared tag maps · 0520fb16
    Jens Axboe authored
    patch 6eca9004 in mainline.
    
    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.
    
    This is fixed with commit 6eca9004 in
    Linus' tree.
    Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    0520fb16
ll_rw_blk.c 106 KB