summaryrefslogtreecommitdiffstats
path: root/block/blk-mq.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2021-10-13 07:58:52 -0600
committerJens Axboe <axboe@kernel.dk>2021-10-18 14:40:39 -0600
commit013a7f95438144f4ab39a1017a0bff2765d2551a (patch)
tree7e2924d5929d85a7c29c15230cfcea17f8824eb0 /block/blk-mq.c
parentafd7de03c5268f74202c1dd4780a8532a11f4c6b (diff)
downloadlinux-013a7f95438144f4ab39a1017a0bff2765d2551a.tar.bz2
block: provide helpers for rq_list manipulation
Instead of open-coding the list additions, traversal, and removal, provide a basic set of helpers. Suggested-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-mq.c')
-rw-r--r--block/blk-mq.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index bd241fd7ee49..74505b545dd3 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -404,17 +404,11 @@ __blk_mq_alloc_requests_batch(struct blk_mq_alloc_data *data,
tag = tag_offset + i;
tags &= ~(1UL << i);
rq = blk_mq_rq_ctx_init(data, tag, alloc_time_ns);
- rq->rq_next = *data->cached_rq;
- *data->cached_rq = rq;
+ rq_list_add(data->cached_rq, rq);
}
data->nr_tags -= nr;
- if (!data->cached_rq)
- return NULL;
-
- rq = *data->cached_rq;
- *data->cached_rq = rq->rq_next;
- return rq;
+ return rq_list_pop(data->cached_rq);
}
static struct request *__blk_mq_alloc_requests(struct blk_mq_alloc_data *data)
@@ -622,11 +616,9 @@ EXPORT_SYMBOL_GPL(blk_mq_free_request);
void blk_mq_free_plug_rqs(struct blk_plug *plug)
{
- while (plug->cached_rq) {
- struct request *rq;
+ struct request *rq;
- rq = plug->cached_rq;
- plug->cached_rq = rq->rq_next;
+ while ((rq = rq_list_pop(&plug->cached_rq)) != NULL) {
percpu_ref_get(&rq->q->q_usage_counter);
blk_mq_free_request(rq);
}
@@ -2418,8 +2410,7 @@ void blk_mq_submit_bio(struct bio *bio)
plug = blk_mq_plug(q, bio);
if (plug && plug->cached_rq) {
- rq = plug->cached_rq;
- plug->cached_rq = rq->rq_next;
+ rq = rq_list_pop(&plug->cached_rq);
INIT_LIST_HEAD(&rq->queuelist);
} else {
struct blk_mq_alloc_data data = {