diff options
-rw-r--r-- | block/bfq-iosched.c | 6 | ||||
-rw-r--r-- | block/blk-mq.c | 11 | ||||
-rw-r--r-- | block/kyber-iosched.c | 8 | ||||
-rw-r--r-- | include/linux/elevator.h | 3 |
4 files changed, 11 insertions, 17 deletions
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index ed93da2462ab..4f69e39c2f89 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c | |||
@@ -4290,7 +4290,7 @@ static void bfq_put_rq_priv_body(struct bfq_queue *bfqq) | |||
4290 | bfq_put_queue(bfqq); | 4290 | bfq_put_queue(bfqq); |
4291 | } | 4291 | } |
4292 | 4292 | ||
4293 | static void bfq_put_rq_private(struct request_queue *q, struct request *rq) | 4293 | static void bfq_finish_request(struct request *rq) |
4294 | { | 4294 | { |
4295 | struct bfq_queue *bfqq = RQ_BFQQ(rq); | 4295 | struct bfq_queue *bfqq = RQ_BFQQ(rq); |
4296 | struct bfq_data *bfqd = bfqq->bfqd; | 4296 | struct bfq_data *bfqd = bfqq->bfqd; |
@@ -4324,7 +4324,7 @@ static void bfq_put_rq_private(struct request_queue *q, struct request *rq) | |||
4324 | */ | 4324 | */ |
4325 | 4325 | ||
4326 | if (!RB_EMPTY_NODE(&rq->rb_node)) | 4326 | if (!RB_EMPTY_NODE(&rq->rb_node)) |
4327 | bfq_remove_request(q, rq); | 4327 | bfq_remove_request(rq->q, rq); |
4328 | bfq_put_rq_priv_body(bfqq); | 4328 | bfq_put_rq_priv_body(bfqq); |
4329 | } | 4329 | } |
4330 | 4330 | ||
@@ -4951,7 +4951,7 @@ static struct elv_fs_entry bfq_attrs[] = { | |||
4951 | static struct elevator_type iosched_bfq_mq = { | 4951 | static struct elevator_type iosched_bfq_mq = { |
4952 | .ops.mq = { | 4952 | .ops.mq = { |
4953 | .get_rq_priv = bfq_get_rq_private, | 4953 | .get_rq_priv = bfq_get_rq_private, |
4954 | .put_rq_priv = bfq_put_rq_private, | 4954 | .finish_request = bfq_finish_request, |
4955 | .exit_icq = bfq_exit_icq, | 4955 | .exit_icq = bfq_exit_icq, |
4956 | .insert_requests = bfq_insert_requests, | 4956 | .insert_requests = bfq_insert_requests, |
4957 | .dispatch_request = bfq_dispatch_request, | 4957 | .dispatch_request = bfq_dispatch_request, |
diff --git a/block/blk-mq.c b/block/blk-mq.c index 1a45c287db64..9df7e0394a48 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c | |||
@@ -437,19 +437,16 @@ void blk_mq_free_request(struct request *rq) | |||
437 | struct request_queue *q = rq->q; | 437 | struct request_queue *q = rq->q; |
438 | struct elevator_queue *e = q->elevator; | 438 | struct elevator_queue *e = q->elevator; |
439 | 439 | ||
440 | if (rq->rq_flags & RQF_ELVPRIV) { | 440 | if (rq->rq_flags & (RQF_ELVPRIV | RQF_QUEUED)) { |
441 | if (e && e->type->ops.mq.put_rq_priv) | 441 | if (e && e->type->ops.mq.finish_request) |
442 | e->type->ops.mq.put_rq_priv(q, rq); | 442 | e->type->ops.mq.finish_request(rq); |
443 | if (rq->elv.icq) { | 443 | if (rq->elv.icq) { |
444 | put_io_context(rq->elv.icq->ioc); | 444 | put_io_context(rq->elv.icq->ioc); |
445 | rq->elv.icq = NULL; | 445 | rq->elv.icq = NULL; |
446 | } | 446 | } |
447 | } | 447 | } |
448 | 448 | ||
449 | if ((rq->rq_flags & RQF_QUEUED) && e && e->type->ops.mq.put_request) | 449 | blk_mq_finish_request(rq); |
450 | e->type->ops.mq.put_request(rq); | ||
451 | else | ||
452 | blk_mq_finish_request(rq); | ||
453 | } | 450 | } |
454 | EXPORT_SYMBOL_GPL(blk_mq_free_request); | 451 | EXPORT_SYMBOL_GPL(blk_mq_free_request); |
455 | 452 | ||
diff --git a/block/kyber-iosched.c b/block/kyber-iosched.c index b9faabc75fdb..2557b399f0a8 100644 --- a/block/kyber-iosched.c +++ b/block/kyber-iosched.c | |||
@@ -446,13 +446,11 @@ static struct request *kyber_get_request(struct request_queue *q, | |||
446 | return rq; | 446 | return rq; |
447 | } | 447 | } |
448 | 448 | ||
449 | static void kyber_put_request(struct request *rq) | 449 | static void kyber_finish_request(struct request *rq) |
450 | { | 450 | { |
451 | struct request_queue *q = rq->q; | 451 | struct kyber_queue_data *kqd = rq->q->elevator->elevator_data; |
452 | struct kyber_queue_data *kqd = q->elevator->elevator_data; | ||
453 | 452 | ||
454 | rq_clear_domain_token(kqd, rq); | 453 | rq_clear_domain_token(kqd, rq); |
455 | blk_mq_finish_request(rq); | ||
456 | } | 454 | } |
457 | 455 | ||
458 | static void kyber_completed_request(struct request *rq) | 456 | static void kyber_completed_request(struct request *rq) |
@@ -816,7 +814,7 @@ static struct elevator_type kyber_sched = { | |||
816 | .init_hctx = kyber_init_hctx, | 814 | .init_hctx = kyber_init_hctx, |
817 | .exit_hctx = kyber_exit_hctx, | 815 | .exit_hctx = kyber_exit_hctx, |
818 | .get_request = kyber_get_request, | 816 | .get_request = kyber_get_request, |
819 | .put_request = kyber_put_request, | 817 | .finish_request = kyber_finish_request, |
820 | .completed_request = kyber_completed_request, | 818 | .completed_request = kyber_completed_request, |
821 | .dispatch_request = kyber_dispatch_request, | 819 | .dispatch_request = kyber_dispatch_request, |
822 | .has_work = kyber_has_work, | 820 | .has_work = kyber_has_work, |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 0e306c5a86d6..4acea351d43f 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
@@ -105,7 +105,7 @@ struct elevator_mq_ops { | |||
105 | void (*request_merged)(struct request_queue *, struct request *, enum elv_merge); | 105 | void (*request_merged)(struct request_queue *, struct request *, enum elv_merge); |
106 | void (*requests_merged)(struct request_queue *, struct request *, struct request *); | 106 | void (*requests_merged)(struct request_queue *, struct request *, struct request *); |
107 | struct request *(*get_request)(struct request_queue *, unsigned int, struct blk_mq_alloc_data *); | 107 | struct request *(*get_request)(struct request_queue *, unsigned int, struct blk_mq_alloc_data *); |
108 | void (*put_request)(struct request *); | 108 | void (*finish_request)(struct request *); |
109 | void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool); | 109 | void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool); |
110 | struct request *(*dispatch_request)(struct blk_mq_hw_ctx *); | 110 | struct request *(*dispatch_request)(struct blk_mq_hw_ctx *); |
111 | bool (*has_work)(struct blk_mq_hw_ctx *); | 111 | bool (*has_work)(struct blk_mq_hw_ctx *); |
@@ -115,7 +115,6 @@ struct elevator_mq_ops { | |||
115 | struct request *(*former_request)(struct request_queue *, struct request *); | 115 | struct request *(*former_request)(struct request_queue *, struct request *); |
116 | struct request *(*next_request)(struct request_queue *, struct request *); | 116 | struct request *(*next_request)(struct request_queue *, struct request *); |
117 | int (*get_rq_priv)(struct request_queue *, struct request *, struct bio *); | 117 | int (*get_rq_priv)(struct request_queue *, struct request *, struct bio *); |
118 | void (*put_rq_priv)(struct request_queue *, struct request *); | ||
119 | void (*init_icq)(struct io_cq *); | 118 | void (*init_icq)(struct io_cq *); |
120 | void (*exit_icq)(struct io_cq *); | 119 | void (*exit_icq)(struct io_cq *); |
121 | }; | 120 | }; |