diff options
| -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 *); |
