diff options
| author | Omar Sandoval <osandov@fb.com> | 2017-04-05 15:01:30 -0400 |
|---|---|---|
| committer | Jens Axboe <axboe@fb.com> | 2017-04-07 10:56:44 -0400 |
| commit | 6917ff0b5bd4139e08a3f3146529dcb3b95ba7a6 (patch) | |
| tree | c85db4362670bf263448883394bd43e9e89abede /block/elevator.c | |
| parent | 81380ca10778b99dce98940cfc993214712df335 (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.c | 32 |
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 | } |
| 258 | EXPORT_SYMBOL(elevator_init); | 253 | EXPORT_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) { |
