block: fix hctx checks for batch allocation
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 17 Jan 2023 11:42:15 +0000 (11:42 +0000)
committerJens Axboe <axboe@kernel.dk>
Tue, 17 Jan 2023 16:56:52 +0000 (09:56 -0700)
commit7746564793978fe2f43b18a302b22dca0ad3a0e8
tree95ce46a90bfbd263b9938dca5aa7b63b094d1641
parent9d6033e350694a67885605674244d43c9559dc36
block: fix hctx checks for batch allocation

When there are no read queues read requests will be assigned a
default queue on allocation. However, blk_mq_get_cached_request() is not
prepared for that and will fail all attempts to grab read requests from
the cache. Worst case it doubles the number of requests allocated,
roughly half of which will be returned by blk_mq_free_plug_rqs().

It only affects batched allocations and so is io_uring specific.
For reference, QD8 t/io_uring benchmark improves by 20-35%.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/80d4511011d7d4751b4cf6375c4e38f237d935e3.1673955390.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c