]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
blk-mq: reinsert cached request to the list
authorKeith Busch <kbusch@kernel.org>
Tue, 26 May 2026 15:35:31 +0000 (08:35 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 26 May 2026 21:05:30 +0000 (15:05 -0600)
A previous commit removed an optimization out of caution for a scenario
that turns out not to be real: all the "queue_exit" goto's are safe to
reinsert the request into the cached_rq's plug list as they are either
from a non-blocking path, or a successful merge that already holds the
queue reference. This optimization is most needed for small sequential
workloads that successfully merge into larger requests.

Fixes: dc278e9bf2b9 ("blk-mq: pop cached request if it is usable")
Suggested-by: Ming Lei <tom.leiming@gmail.com>
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://patch.msgid.link/20260526153531.2365935-1-kbusch@meta.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index 28c2d931e75ea224c40969c78be0f75a1cb5984d..a24175441380ec8743336d4fd6c2a521a1ead234 100644 (file)
@@ -3246,7 +3246,7 @@ queue_exit:
        if (!rq)
                blk_queue_exit(q);
        else
-               blk_mq_free_request(rq);
+               rq_list_add_head(&plug->cached_rqs, rq);
 }
 
 #ifdef CONFIG_BLK_MQ_STACKING