diff options
author | Paolo Valente <paolo.valente@linaro.org> | 2017-02-07 12:24:43 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-02-10 11:09:59 -0500 |
commit | f1ba82616c3368e1ae9e64ef29cf3edc1be0860d (patch) | |
tree | ca90d2ba3a4aa80c593a7a6af6ef8593caa01091 | |
parent | 5f478e4ea5c5560b4e40eb136991a09f9389f331 (diff) |
blk-mq: pass bio to blk_mq_sched_get_rq_priv
bio is used in bfq-mq's get_rq_priv, to get the request group. We could
pass directly the group here, but I thought that passing the bio was
more general, giving the possibility to get other pieces of information
if needed.
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r-- | block/blk-mq-sched.c | 8 | ||||
-rw-r--r-- | block/blk-mq-sched.h | 5 | ||||
-rw-r--r-- | include/linux/elevator.h | 2 |
3 files changed, 9 insertions, 6 deletions
diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c index 72d0d8361175..97fe904f0a04 100644 --- a/block/blk-mq-sched.c +++ b/block/blk-mq-sched.c | |||
@@ -68,7 +68,9 @@ error: | |||
68 | EXPORT_SYMBOL_GPL(blk_mq_sched_init_hctx_data); | 68 | EXPORT_SYMBOL_GPL(blk_mq_sched_init_hctx_data); |
69 | 69 | ||
70 | static void __blk_mq_sched_assign_ioc(struct request_queue *q, | 70 | static void __blk_mq_sched_assign_ioc(struct request_queue *q, |
71 | struct request *rq, struct io_context *ioc) | 71 | struct request *rq, |
72 | struct bio *bio, | ||
73 | struct io_context *ioc) | ||
72 | { | 74 | { |
73 | struct io_cq *icq; | 75 | struct io_cq *icq; |
74 | 76 | ||
@@ -83,7 +85,7 @@ static void __blk_mq_sched_assign_ioc(struct request_queue *q, | |||
83 | } | 85 | } |
84 | 86 | ||
85 | rq->elv.icq = icq; | 87 | rq->elv.icq = icq; |
86 | if (!blk_mq_sched_get_rq_priv(q, rq)) { | 88 | if (!blk_mq_sched_get_rq_priv(q, rq, bio)) { |
87 | rq->rq_flags |= RQF_ELVPRIV; | 89 | rq->rq_flags |= RQF_ELVPRIV; |
88 | get_io_context(icq->ioc); | 90 | get_io_context(icq->ioc); |
89 | return; | 91 | return; |
@@ -99,7 +101,7 @@ static void blk_mq_sched_assign_ioc(struct request_queue *q, | |||
99 | 101 | ||
100 | ioc = rq_ioc(bio); | 102 | ioc = rq_ioc(bio); |
101 | if (ioc) | 103 | if (ioc) |
102 | __blk_mq_sched_assign_ioc(q, rq, ioc); | 104 | __blk_mq_sched_assign_ioc(q, rq, bio, ioc); |
103 | } | 105 | } |
104 | 106 | ||
105 | struct request *blk_mq_sched_get_request(struct request_queue *q, | 107 | struct request *blk_mq_sched_get_request(struct request_queue *q, |
diff --git a/block/blk-mq-sched.h b/block/blk-mq-sched.h index 5954859c8670..7b5f3b95c78e 100644 --- a/block/blk-mq-sched.h +++ b/block/blk-mq-sched.h | |||
@@ -49,12 +49,13 @@ blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio) | |||
49 | } | 49 | } |
50 | 50 | ||
51 | static inline int blk_mq_sched_get_rq_priv(struct request_queue *q, | 51 | static inline int blk_mq_sched_get_rq_priv(struct request_queue *q, |
52 | struct request *rq) | 52 | struct request *rq, |
53 | struct bio *bio) | ||
53 | { | 54 | { |
54 | struct elevator_queue *e = q->elevator; | 55 | struct elevator_queue *e = q->elevator; |
55 | 56 | ||
56 | if (e && e->type->ops.mq.get_rq_priv) | 57 | if (e && e->type->ops.mq.get_rq_priv) |
57 | return e->type->ops.mq.get_rq_priv(q, rq); | 58 | return e->type->ops.mq.get_rq_priv(q, rq, bio); |
58 | 59 | ||
59 | return 0; | 60 | return 0; |
60 | } | 61 | } |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 8265b6330cc2..aebecc4ed088 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
@@ -109,7 +109,7 @@ struct elevator_mq_ops { | |||
109 | void (*requeue_request)(struct request *); | 109 | void (*requeue_request)(struct request *); |
110 | struct request *(*former_request)(struct request_queue *, struct request *); | 110 | struct request *(*former_request)(struct request_queue *, struct request *); |
111 | struct request *(*next_request)(struct request_queue *, struct request *); | 111 | struct request *(*next_request)(struct request_queue *, struct request *); |
112 | int (*get_rq_priv)(struct request_queue *, struct request *); | 112 | int (*get_rq_priv)(struct request_queue *, struct request *, struct bio *); |
113 | void (*put_rq_priv)(struct request_queue *, struct request *); | 113 | void (*put_rq_priv)(struct request_queue *, struct request *); |
114 | void (*init_icq)(struct io_cq *); | 114 | void (*init_icq)(struct io_cq *); |
115 | void (*exit_icq)(struct io_cq *); | 115 | void (*exit_icq)(struct io_cq *); |