summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-05-31 13:11:39 -0400
committerJens Axboe <axboe@kernel.dk>2018-06-01 09:38:19 -0400
commitacddf3b308f6b6e23653de02e1abf98f402f1f12 (patch)
tree296aa44427ee604597d22412d212ae9744f7dd92 /block
parentddb7253254fee6922764043101f8b28b6a00595d (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.c10
-rw-r--r--block/blk-mq-sched.c11
-rw-r--r--block/blk-mq-sched.h2
-rw-r--r--block/blk-mq.c2
-rw-r--r--block/elevator.c11
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
1190out_exit_flush_rq: 1182out_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
651int 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,
33void blk_mq_sched_exit_hctx(struct request_queue *q, struct blk_mq_hw_ctx *hctx, 33void 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
36int blk_mq_sched_init(struct request_queue *q);
37
38static inline bool 36static inline bool
39blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio) 37blk_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)
202int elevator_init(struct request_queue *q) 202int 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);
257out_unlock:
258 mutex_unlock(&q->sysfs_lock);
258 return err; 259 return err;
259} 260}
260 261