summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo Valente <paolo.valente@linaro.org>2017-02-07 12:24:43 -0500
committerJens Axboe <axboe@fb.com>2017-02-10 11:09:59 -0500
commitf1ba82616c3368e1ae9e64ef29cf3edc1be0860d (patch)
treeca90d2ba3a4aa80c593a7a6af6ef8593caa01091
parent5f478e4ea5c5560b4e40eb136991a09f9389f331 (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.c8
-rw-r--r--block/blk-mq-sched.h5
-rw-r--r--include/linux/elevator.h2
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:
68EXPORT_SYMBOL_GPL(blk_mq_sched_init_hctx_data); 68EXPORT_SYMBOL_GPL(blk_mq_sched_init_hctx_data);
69 69
70static void __blk_mq_sched_assign_ioc(struct request_queue *q, 70static 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
105struct request *blk_mq_sched_get_request(struct request_queue *q, 107struct 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
51static inline int blk_mq_sched_get_rq_priv(struct request_queue *q, 51static 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 *);