diff options
author | Christoph Hellwig <hch@lst.de> | 2018-05-31 13:11:39 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-06-01 09:38:19 -0400 |
commit | acddf3b308f6b6e23653de02e1abf98f402f1f12 (patch) | |
tree | 296aa44427ee604597d22412d212ae9744f7dd92 /block | |
parent | ddb7253254fee6922764043101f8b28b6a00595d (diff) |
block: move sysfs_lock into elevator_init
Both callers take just around so function call, so move it in.
Also remove the now pointless blk_mq_sched_init wrapper.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
Tested-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-core.c | 10 | ||||
-rw-r--r-- | block/blk-mq-sched.c | 11 | ||||
-rw-r--r-- | block/blk-mq-sched.h | 2 | ||||
-rw-r--r-- | block/blk-mq.c | 2 | ||||
-rw-r--r-- | block/elevator.c | 11 |
5 files changed, 8 insertions, 28 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index 18b691c93b63..cd573a33a6f3 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -1175,16 +1175,8 @@ int blk_init_allocated_queue(struct request_queue *q) | |||
1175 | 1175 | ||
1176 | q->sg_reserved_size = INT_MAX; | 1176 | q->sg_reserved_size = INT_MAX; |
1177 | 1177 | ||
1178 | /* Protect q->elevator from elevator_change */ | 1178 | if (elevator_init(q)) |
1179 | mutex_lock(&q->sysfs_lock); | ||
1180 | |||
1181 | /* init elevator */ | ||
1182 | if (elevator_init(q)) { | ||
1183 | mutex_unlock(&q->sysfs_lock); | ||
1184 | goto out_exit_flush_rq; | 1179 | goto out_exit_flush_rq; |
1185 | } | ||
1186 | |||
1187 | mutex_unlock(&q->sysfs_lock); | ||
1188 | return 0; | 1180 | return 0; |
1189 | 1181 | ||
1190 | out_exit_flush_rq: | 1182 | out_exit_flush_rq: |
diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c index fd4f68d61df0..b1f06088cee5 100644 --- a/block/blk-mq-sched.c +++ b/block/blk-mq-sched.c | |||
@@ -647,14 +647,3 @@ void blk_mq_exit_sched(struct request_queue *q, struct elevator_queue *e) | |||
647 | blk_mq_sched_tags_teardown(q); | 647 | blk_mq_sched_tags_teardown(q); |
648 | q->elevator = NULL; | 648 | q->elevator = NULL; |
649 | } | 649 | } |
650 | |||
651 | int blk_mq_sched_init(struct request_queue *q) | ||
652 | { | ||
653 | int ret; | ||
654 | |||
655 | mutex_lock(&q->sysfs_lock); | ||
656 | ret = elevator_init(q); | ||
657 | mutex_unlock(&q->sysfs_lock); | ||
658 | |||
659 | return ret; | ||
660 | } | ||
diff --git a/block/blk-mq-sched.h b/block/blk-mq-sched.h index 1e9c9018ace1..0cb8f938dff9 100644 --- a/block/blk-mq-sched.h +++ b/block/blk-mq-sched.h | |||
@@ -33,8 +33,6 @@ int blk_mq_sched_init_hctx(struct request_queue *q, struct blk_mq_hw_ctx *hctx, | |||
33 | void blk_mq_sched_exit_hctx(struct request_queue *q, struct blk_mq_hw_ctx *hctx, | 33 | void blk_mq_sched_exit_hctx(struct request_queue *q, struct blk_mq_hw_ctx *hctx, |
34 | unsigned int hctx_idx); | 34 | unsigned int hctx_idx); |
35 | 35 | ||
36 | int blk_mq_sched_init(struct request_queue *q); | ||
37 | |||
38 | static inline bool | 36 | static inline bool |
39 | blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio) | 37 | blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio) |
40 | { | 38 | { |
diff --git a/block/blk-mq.c b/block/blk-mq.c index 3d3952301b3e..858d6edff4d3 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c | |||
@@ -2573,7 +2573,7 @@ struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set, | |||
2573 | if (!(set->flags & BLK_MQ_F_NO_SCHED)) { | 2573 | if (!(set->flags & BLK_MQ_F_NO_SCHED)) { |
2574 | int ret; | 2574 | int ret; |
2575 | 2575 | ||
2576 | ret = blk_mq_sched_init(q); | 2576 | ret = elevator_init(q); |
2577 | if (ret) | 2577 | if (ret) |
2578 | return ERR_PTR(ret); | 2578 | return ERR_PTR(ret); |
2579 | } | 2579 | } |
diff --git a/block/elevator.c b/block/elevator.c index 9276540af2a1..d6480e70816e 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
@@ -202,16 +202,15 @@ static void elevator_release(struct kobject *kobj) | |||
202 | int elevator_init(struct request_queue *q) | 202 | int elevator_init(struct request_queue *q) |
203 | { | 203 | { |
204 | struct elevator_type *e = NULL; | 204 | struct elevator_type *e = NULL; |
205 | int err; | 205 | int err = 0; |
206 | 206 | ||
207 | /* | 207 | /* |
208 | * q->sysfs_lock must be held to provide mutual exclusion between | 208 | * q->sysfs_lock must be held to provide mutual exclusion between |
209 | * elevator_switch() and here. | 209 | * elevator_switch() and here. |
210 | */ | 210 | */ |
211 | lockdep_assert_held(&q->sysfs_lock); | 211 | mutex_lock(&q->sysfs_lock); |
212 | |||
213 | if (unlikely(q->elevator)) | 212 | if (unlikely(q->elevator)) |
214 | return 0; | 213 | goto out_unlock; |
215 | 214 | ||
216 | /* | 215 | /* |
217 | * Use the default elevator specified by config boot param for | 216 | * Use the default elevator specified by config boot param for |
@@ -237,7 +236,7 @@ int elevator_init(struct request_queue *q) | |||
237 | if (q->nr_hw_queues == 1) | 236 | if (q->nr_hw_queues == 1) |
238 | e = elevator_get(q, "mq-deadline", false); | 237 | e = elevator_get(q, "mq-deadline", false); |
239 | if (!e) | 238 | if (!e) |
240 | return 0; | 239 | goto out_unlock; |
241 | } else | 240 | } else |
242 | e = elevator_get(q, CONFIG_DEFAULT_IOSCHED, false); | 241 | e = elevator_get(q, CONFIG_DEFAULT_IOSCHED, false); |
243 | 242 | ||
@@ -255,6 +254,8 @@ int elevator_init(struct request_queue *q) | |||
255 | err = e->ops.sq.elevator_init_fn(q, e); | 254 | err = e->ops.sq.elevator_init_fn(q, e); |
256 | if (err) | 255 | if (err) |
257 | elevator_put(e); | 256 | elevator_put(e); |
257 | out_unlock: | ||
258 | mutex_unlock(&q->sysfs_lock); | ||
258 | return err; | 259 | return err; |
259 | } | 260 | } |
260 | 261 | ||