• Naohiro Aota's avatar
    block: schedule queue restart after BLK_STS_ZONE_RESOURCE · 9586e67b
    Naohiro Aota authored
    When dispatching a zone append write request to a SCSI zoned block device,
    if the target zone of the request is already locked, the device driver will
    return BLK_STS_ZONE_RESOURCE and the request will be pushed back to the
    hctx dipatch queue. The queue will be marked as RESTART in
    dd_finish_request() and restarted in __blk_mq_free_request(). However, this
    restart applies to the hctx of the completed request. If the requeued
    request is on a different hctx, dispatch will no be retried until another
    request is submitted or the next periodic queue run triggers, leading to up
    to 30 seconds latency for the requeued request.
    
    Fix this problem by scheduling a queue restart similarly to the
    BLK_STS_RESOURCE case or when we cannot get the budget.
    
    Also, consolidate the checks into the "need_resource" variable to simplify
    the condition.
    Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Cc: Niklas Cassel <Niklas.Cassel@wdc.com>
    Link: https://lore.kernel.org/r/20211026165127.4151055-1-naohiro.aota@wdc.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    9586e67b
blk-mq.c 100 KB