• yangerkun's avatar
    blk-mq: call commit_rqs while list empty but error happen · 632bfb63
    yangerkun authored
    Blk-mq should call commit_rqs once 'bd.last != true' and no more
    request will come(so virtscsi can kick the virtqueue, e.g.). We already
    do that in 'blk_mq_dispatch_rq_list/blk_mq_try_issue_list_directly' while
    list not empty and 'queued > 0'. However, we can seen the same scene
    once the last request in list call queue_rq and return error like
    BLK_STS_IOERR which will not requeue the request, and lead that list
    empty but need call commit_rqs too(Or the request for virtscsi will stay
    timeout until other request kick virtqueue).
    
    We found this problem by do fsstress test with offline/online virtscsi
    device repeat quickly.
    
    Fixes: d666ba98 ("blk-mq: add mq_ops->commit_rqs()")
    Reported-by: default avatarzhangyi (F) <yi.zhang@huawei.com>
    Signed-off-by: default avataryangerkun <yangerkun@huawei.com>
    Reviewed-by: default avatarMing Lei <ming.lei@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    632bfb63
blk-mq.c 96.6 KB