Skip to content

Commit 93fffe1

Browse files
Christoph Hellwigaxboe
authored andcommitted
blk-mq: pass a flags argument to elevator_type->insert_requests
Instead of passing a bool at_head, pass down the full flags from the blk_mq_insert_request interface. 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-20-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 2b59761 commit 93fffe1

5 files changed

Lines changed: 21 additions & 18 deletions

File tree

block/bfq-iosched.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6231,7 +6231,7 @@ static inline void bfq_update_insert_stats(struct request_queue *q,
62316231
static struct bfq_queue *bfq_init_rq(struct request *rq);
62326232

62336233
static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
6234-
bool at_head)
6234+
blk_insert_t flags)
62356235
{
62366236
struct request_queue *q = hctx->queue;
62376237
struct bfq_data *bfqd = q->elevator->elevator_data;
@@ -6254,11 +6254,10 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
62546254

62556255
trace_block_rq_insert(rq);
62566256

6257-
if (!bfqq || at_head) {
6258-
if (at_head)
6259-
list_add(&rq->queuelist, &bfqd->dispatch);
6260-
else
6261-
list_add_tail(&rq->queuelist, &bfqd->dispatch);
6257+
if (flags & BLK_MQ_INSERT_AT_HEAD) {
6258+
list_add(&rq->queuelist, &bfqd->dispatch);
6259+
} else if (!bfqq) {
6260+
list_add_tail(&rq->queuelist, &bfqd->dispatch);
62626261
} else {
62636262
idle_timer_disabled = __bfq_insert_request(bfqd, rq);
62646263
/*
@@ -6288,14 +6287,15 @@ static void bfq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
62886287
}
62896288

62906289
static void bfq_insert_requests(struct blk_mq_hw_ctx *hctx,
6291-
struct list_head *list, bool at_head)
6290+
struct list_head *list,
6291+
blk_insert_t flags)
62926292
{
62936293
while (!list_empty(list)) {
62946294
struct request *rq;
62956295

62966296
rq = list_first_entry(list, struct request, queuelist);
62976297
list_del_init(&rq->queuelist);
6298-
bfq_insert_request(hctx, rq, at_head);
6298+
bfq_insert_request(hctx, rq, flags);
62996299
}
63006300
}
63016301

block/blk-mq.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2556,8 +2556,7 @@ static void blk_mq_insert_request(struct request *rq, blk_insert_t flags)
25562556
WARN_ON_ONCE(rq->tag != BLK_MQ_NO_TAG);
25572557

25582558
list_add(&rq->queuelist, &list);
2559-
q->elevator->type->ops.insert_requests(hctx, &list,
2560-
flags & BLK_MQ_INSERT_AT_HEAD);
2559+
q->elevator->type->ops.insert_requests(hctx, &list, flags);
25612560
} else {
25622561
trace_block_rq_insert(rq);
25632562

@@ -2768,7 +2767,7 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched)
27682767
percpu_ref_get(&this_hctx->queue->q_usage_counter);
27692768
if (this_hctx->queue->elevator) {
27702769
this_hctx->queue->elevator->type->ops.insert_requests(this_hctx,
2771-
&list, false);
2770+
&list, 0);
27722771
blk_mq_run_hw_queue(this_hctx, from_sched);
27732772
} else {
27742773
blk_mq_insert_requests(this_hctx, this_ctx, &list, from_sched);

block/elevator.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <linux/percpu.h>
66
#include <linux/hashtable.h>
7+
#include "blk-mq.h"
78

89
struct io_cq;
910
struct elevator_type;
@@ -37,7 +38,8 @@ struct elevator_mq_ops {
3738
void (*limit_depth)(blk_opf_t, struct blk_mq_alloc_data *);
3839
void (*prepare_request)(struct request *);
3940
void (*finish_request)(struct request *);
40-
void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
41+
void (*insert_requests)(struct blk_mq_hw_ctx *hctx, struct list_head *list,
42+
blk_insert_t flags);
4143
struct request *(*dispatch_request)(struct blk_mq_hw_ctx *);
4244
bool (*has_work)(struct blk_mq_hw_ctx *);
4345
void (*completed_request)(struct request *, u64);

block/kyber-iosched.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,8 @@ static void kyber_prepare_request(struct request *rq)
588588
}
589589

590590
static void kyber_insert_requests(struct blk_mq_hw_ctx *hctx,
591-
struct list_head *rq_list, bool at_head)
591+
struct list_head *rq_list,
592+
blk_insert_t flags)
592593
{
593594
struct kyber_hctx_data *khd = hctx->sched_data;
594595
struct request *rq, *next;
@@ -600,7 +601,7 @@ static void kyber_insert_requests(struct blk_mq_hw_ctx *hctx,
600601

601602
spin_lock(&kcq->lock);
602603
trace_block_rq_insert(rq);
603-
if (at_head)
604+
if (flags & BLK_MQ_INSERT_AT_HEAD)
604605
list_move(&rq->queuelist, head);
605606
else
606607
list_move_tail(&rq->queuelist, head);

block/mq-deadline.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ static bool dd_bio_merge(struct request_queue *q, struct bio *bio,
766766
* add rq to rbtree and fifo
767767
*/
768768
static void dd_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
769-
bool at_head)
769+
blk_insert_t flags)
770770
{
771771
struct request_queue *q = hctx->queue;
772772
struct deadline_data *dd = q->elevator->elevator_data;
@@ -799,7 +799,7 @@ static void dd_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
799799

800800
trace_block_rq_insert(rq);
801801

802-
if (at_head) {
802+
if (flags & BLK_MQ_INSERT_AT_HEAD) {
803803
list_add(&rq->queuelist, &per_prio->dispatch);
804804
rq->fifo_time = jiffies;
805805
} else {
@@ -823,7 +823,8 @@ static void dd_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
823823
* Called from blk_mq_insert_request() or blk_mq_dispatch_plug_list().
824824
*/
825825
static void dd_insert_requests(struct blk_mq_hw_ctx *hctx,
826-
struct list_head *list, bool at_head)
826+
struct list_head *list,
827+
blk_insert_t flags)
827828
{
828829
struct request_queue *q = hctx->queue;
829830
struct deadline_data *dd = q->elevator->elevator_data;
@@ -834,7 +835,7 @@ static void dd_insert_requests(struct blk_mq_hw_ctx *hctx,
834835

835836
rq = list_first_entry(list, struct request, queuelist);
836837
list_del_init(&rq->queuelist);
837-
dd_insert_request(hctx, rq, at_head);
838+
dd_insert_request(hctx, rq, flags);
838839
}
839840
spin_unlock(&dd->lock);
840841
}

0 commit comments

Comments
 (0)