[PATCH 4/4] blk-mq: improve readability of blk_mq_alloc_request()

From: Jinlong Chen
Date: Tue Nov 01 2022 - 11:15:44 EST


Add a helper blk_mq_alloc_request_nocache() to alloc request without
cache. This makes blk_mq_alloc_request() more readable.

Signed-off-by: Jinlong Chen <nickyc975@xxxxxxxxxx>
---
block/blk-mq.c | 47 +++++++++++++++++++++++++++++------------------
1 file changed, 29 insertions(+), 18 deletions(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 87a6348a0d0a..2fae111a42c8 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -572,36 +572,47 @@ static struct request *blk_mq_alloc_cached_request(struct request_queue *q,
return rq;
}

-struct request *blk_mq_alloc_request(struct request_queue *q, blk_opf_t opf,
- blk_mq_req_flags_t flags)
+static struct request *blk_mq_alloc_request_nocache(struct request_queue *q,
+ blk_opf_t opf, blk_mq_req_flags_t flags)
{
- struct request *rq;
-
- rq = blk_mq_alloc_cached_request(q, opf, flags);
- if (!rq) {
- struct blk_mq_alloc_data data = {
+ struct blk_mq_alloc_data data = {
.q = q,
.flags = flags,
.cmd_flags = opf,
.nr_tags = 1,
};
- int ret;
+ struct request *rq;
+ int ret;

- ret = blk_queue_enter(q, flags);
- if (ret)
- return ERR_PTR(ret);
+ ret = blk_queue_enter(q, flags);
+ if (ret)
+ return ERR_PTR(ret);

- rq = __blk_mq_alloc_requests(&data);
- if (!rq)
- goto out_queue_exit;
+ rq = __blk_mq_alloc_requests(&data);
+ if (!rq) {
+ rq = ERR_PTR(-EWOULDBLOCK);
+ blk_queue_exit(q);
}
+
+ return rq;
+}
+
+struct request *blk_mq_alloc_request(struct request_queue *q, blk_opf_t opf,
+ blk_mq_req_flags_t flags)
+{
+ struct request *rq;
+
+ rq = blk_mq_alloc_cached_request(q, opf, flags);
+ if (!rq) {
+ rq = blk_mq_alloc_request_nocache(q, opf, flags);
+ if (IS_ERR(rq))
+ return rq;
+ }
+
rq->__data_len = 0;
rq->__sector = (sector_t) -1;
rq->bio = rq->biotail = NULL;
- return rq;
-out_queue_exit:
- blk_queue_exit(q);
- return ERR_PTR(-EWOULDBLOCK);
+ return rq;
}
EXPORT_SYMBOL(blk_mq_alloc_request);

--
2.31.1