]> git.baikalelectronics.ru Git - kernel.git/commit
block: schedule queue restart after BLK_STS_ZONE_RESOURCE
authorNaohiro Aota <naohiro.aota@wdc.com>
Tue, 26 Oct 2021 16:51:27 +0000 (01:51 +0900)
committerJens Axboe <axboe@kernel.dk>
Tue, 26 Oct 2021 22:00:36 +0000 (16:00 -0600)
commit2991bd513c69c9137f26499a5e0045f6349bb448
tree71af4c5b5d89759e42e27dbfef0872056d45a40a
parent2a019c2d9f9d3357e583287bdba7464553223017
block: schedule queue restart after BLK_STS_ZONE_RESOURCE

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: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Niklas Cassel <Niklas.Cassel@wdc.com>
Link: https://lore.kernel.org/r/20211026165127.4151055-1-naohiro.aota@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c