blk-mq: factor out a blk_mq_get_budget_and_tag helper
authorChristoph Hellwig <hch@lst.de>
Thu, 13 Apr 2023 06:40:49 +0000 (08:40 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 13 Apr 2023 12:52:30 +0000 (06:52 -0600)
Factor out a helper from __blk_mq_try_issue_directly in preparation
of folding that function into its two callers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20230413064057.707578-13-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index d17871c..5cb7ebe 100644 (file)
@@ -2624,13 +2624,27 @@ static blk_status_t __blk_mq_issue_directly(struct blk_mq_hw_ctx *hctx,
        return ret;
 }
 
+static bool blk_mq_get_budget_and_tag(struct request *rq)
+{
+       int budget_token;
+
+       budget_token = blk_mq_get_dispatch_budget(rq->q);
+       if (budget_token < 0)
+               return false;
+       blk_mq_set_rq_budget_token(rq, budget_token);
+       if (!blk_mq_get_driver_tag(rq)) {
+               blk_mq_put_dispatch_budget(rq->q, budget_token);
+               return false;
+       }
+       return true;
+}
+
 static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
                                                struct request *rq,
                                                bool bypass_insert, bool last)
 {
        struct request_queue *q = rq->q;
        bool run_queue = true;
-       int budget_token;
 
        /*
         * RCU or SRCU read lock is needed before checking quiesced flag.
@@ -2648,16 +2662,8 @@ static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
        if ((rq->rq_flags & RQF_ELV) && !bypass_insert)
                goto insert;
 
-       budget_token = blk_mq_get_dispatch_budget(q);
-       if (budget_token < 0)
-               goto insert;
-
-       blk_mq_set_rq_budget_token(rq, budget_token);
-
-       if (!blk_mq_get_driver_tag(rq)) {
-               blk_mq_put_dispatch_budget(q, budget_token);
+       if (!blk_mq_get_budget_and_tag(rq))
                goto insert;
-       }
 
        return __blk_mq_issue_directly(hctx, rq, last);
 insert: