summaryrefslogtreecommitdiffstats
path: root/block/elevator.c
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2017-04-05 15:01:30 -0400
committerJens Axboe <axboe@fb.com>2017-04-07 10:56:44 -0400
commit6917ff0b5bd4139e08a3f3146529dcb3b95ba7a6 (patch)
treec85db4362670bf263448883394bd43e9e89abede /block/elevator.c
parent81380ca10778b99dce98940cfc993214712df335 (diff)
blk-mq-sched: refactor scheduler initialization
Preparation cleanup for the next couple of fixes, push blk_mq_sched_setup() and e->ops.mq.init_sched() into a helper. Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/elevator.c')
-rw-r--r--block/elevator.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/block/elevator.c b/block/elevator.c
index 01139f549b5b..f236ef1d2be9 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -242,17 +242,12 @@ int elevator_init(struct request_queue *q, char *name)
242 } 242 }
243 } 243 }
244 244
245 if (e->uses_mq) { 245 if (e->uses_mq)
246 err = blk_mq_sched_setup(q); 246 err = blk_mq_init_sched(q, e);
247 if (!err) 247 else
248 err = e->ops.mq.init_sched(q, e);
249 } else
250 err = e->ops.sq.elevator_init_fn(q, e); 248 err = e->ops.sq.elevator_init_fn(q, e);
251 if (err) { 249 if (err)
252 if (e->uses_mq)
253 blk_mq_sched_teardown(q);
254 elevator_put(e); 250 elevator_put(e);
255 }
256 return err; 251 return err;
257} 252}
258EXPORT_SYMBOL(elevator_init); 253EXPORT_SYMBOL(elevator_init);
@@ -987,21 +982,18 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
987 } 982 }
988 983
989 /* allocate, init and register new elevator */ 984 /* allocate, init and register new elevator */
990 if (new_e) { 985 if (q->mq_ops)
991 if (new_e->uses_mq) { 986 err = blk_mq_init_sched(q, new_e);
992 err = blk_mq_sched_setup(q); 987 else
993 if (!err) 988 err = new_e->ops.sq.elevator_init_fn(q, new_e);
994 err = new_e->ops.mq.init_sched(q, new_e); 989 if (err)
995 } else 990 goto fail_init;
996 err = new_e->ops.sq.elevator_init_fn(q, new_e);
997 if (err)
998 goto fail_init;
999 991
992 if (new_e) {
1000 err = elv_register_queue(q); 993 err = elv_register_queue(q);
1001 if (err) 994 if (err)
1002 goto fail_register; 995 goto fail_register;
1003 } else 996 }
1004 q->elevator = NULL;
1005 997
1006 /* done, kill the old one and finish */ 998 /* done, kill the old one and finish */
1007 if (old) { 999 if (old) {