]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
blk-mq: Move more error handling into blk_mq_submit_bio()
authorBart Van Assche <bvanassche@acm.org>
Wed, 18 Dec 2024 21:22:46 +0000 (13:22 -0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 14 Jan 2025 17:13:25 +0000 (10:13 -0700)
The error handling code in blk_mq_get_new_requests() cannot be understood
without knowing that this function is only called by blk_mq_submit_bio().
Hence move the code for handling blk_mq_get_new_requests() failures into
blk_mq_submit_bio().

Cc: Damien Le Moal <dlemoal@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://lore.kernel.org/r/20241218212246.1073149-3-bvanassche@acm.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index b815ac4872b7d76382878e97d80dd9aff56f3a59..da39a1cac70229f08cd2ebadc63ad2efcc906100 100644 (file)
@@ -2984,12 +2984,9 @@ static struct request *blk_mq_get_new_requests(struct request_queue *q,
        }
 
        rq = __blk_mq_alloc_requests(&data);
-       if (rq)
-               return rq;
-       rq_qos_cleanup(q, bio);
-       if (bio->bi_opf & REQ_NOWAIT)
-               bio_wouldblock_error(bio);
-       return NULL;
+       if (unlikely(!rq))
+               rq_qos_cleanup(q, bio);
+       return rq;
 }
 
 /*
@@ -3129,8 +3126,11 @@ new_request:
                blk_mq_use_cached_rq(rq, plug, bio);
        } else {
                rq = blk_mq_get_new_requests(q, plug, bio, nr_segs);
-               if (unlikely(!rq))
+               if (unlikely(!rq)) {
+                       if (bio->bi_opf & REQ_NOWAIT)
+                               bio_wouldblock_error(bio);
                        goto queue_exit;
+               }
        }
 
        trace_block_getrq(bio);