• Jens Axboe's avatar
    blk-mq: ensure that bd->last is always set correctly · 113285b4
    Jens Axboe authored
    When drivers are called with a request in blk-mq, blk-mq flags the
    state such that the driver knows if this is the last request in
    this call chain or not. The driver can then use that information
    to defer kicking off IO until bd->last is true. However, with blk-mq
    and scheduling, we need to allocate a driver tag for a request before
    it can be issued. If we fail to allocate such a tag, we could end up
    in the situation where the last request issued did not have
    bd->last == true set. This can then cause a driver hang.
    
    This fixes a hang with virtio-blk, which uses bd->last as a hint
    on whether to kick the queue or not.
    Reported-by: default avatarChris Mason <clm@fb.com>
    Tested-by: default avatarChris Mason <clm@fb.com>
    Reviewed-by: default avatarOmar Sandoval <osandov@fb.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    113285b4
blk-mq.c 69.9 KB