blk-mq: pass bio to blk_mq_sched_get_rq_priv
authorPaolo Valente <paolo.valente@linaro.org>
Tue, 7 Feb 2017 17:24:43 +0000 (18:24 +0100)
committerJens Axboe <axboe@fb.com>
Fri, 10 Feb 2017 16:09:59 +0000 (09:09 -0700)
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>
block/blk-mq-sched.c
block/blk-mq-sched.h
include/linux/elevator.h

index 72d0d83..97fe904 100644 (file)
@@ -68,7 +68,9 @@ error:
 EXPORT_SYMBOL_GPL(blk_mq_sched_init_hctx_data);
 
 static void __blk_mq_sched_assign_ioc(struct request_queue *q,
-                                     struct request *rq, struct io_context *ioc)
+                                     struct request *rq,
+                                     struct bio *bio,
+                                     struct io_context *ioc)
 {
        struct io_cq *icq;
 
@@ -83,7 +85,7 @@ static void __blk_mq_sched_assign_ioc(struct request_queue *q,
        }
 
        rq->elv.icq = icq;
-       if (!blk_mq_sched_get_rq_priv(q, rq)) {
+       if (!blk_mq_sched_get_rq_priv(q, rq, bio)) {
                rq->rq_flags |= RQF_ELVPRIV;
                get_io_context(icq->ioc);
                return;
@@ -99,7 +101,7 @@ static void blk_mq_sched_assign_ioc(struct request_queue *q,
 
        ioc = rq_ioc(bio);
        if (ioc)
-               __blk_mq_sched_assign_ioc(q, rq, ioc);
+               __blk_mq_sched_assign_ioc(q, rq, bio, ioc);
 }
 
 struct request *blk_mq_sched_get_request(struct request_queue *q,
index 5954859..7b5f3b9 100644 (file)
@@ -49,12 +49,13 @@ blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio)
 }
 
 static inline int blk_mq_sched_get_rq_priv(struct request_queue *q,
-                                          struct request *rq)
+                                          struct request *rq,
+                                          struct bio *bio)
 {
        struct elevator_queue *e = q->elevator;
 
        if (e && e->type->ops.mq.get_rq_priv)
-               return e->type->ops.mq.get_rq_priv(q, rq);
+               return e->type->ops.mq.get_rq_priv(q, rq, bio);
 
        return 0;
 }
index 8265b63..aebecc4 100644 (file)
@@ -109,7 +109,7 @@ struct elevator_mq_ops {
        void (*requeue_request)(struct request *);
        struct request *(*former_request)(struct request_queue *, struct request *);
        struct request *(*next_request)(struct request_queue *, struct request *);
-       int (*get_rq_priv)(struct request_queue *, struct request *);
+       int (*get_rq_priv)(struct request_queue *, struct request *, struct bio *);
        void (*put_rq_priv)(struct request_queue *, struct request *);
        void (*init_icq)(struct io_cq *);
        void (*exit_icq)(struct io_cq *);