diff options
author | Omar Sandoval <osandov@fb.com> | 2017-02-06 12:52:24 -0800 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-02-06 13:55:36 -0700 |
commit | 80c6b15732f0d8830032149cbcbc8d67e074b5e8 (patch) | |
tree | ac33b85a662c850764694ce2200c528ce2858ea5 /block/blk-sysfs.c | |
parent | e980f62353c697cbf0c4325e43df6e44399aeb64 (diff) |
blk-mq-sched: (un)register elevator when (un)registering queue
I noticed that when booting with a default blk-mq I/O scheduler, the
/sys/block/*/queue/iosched directory was missing. However, switching
after boot did create the directory. This is because we skip the initial
elevator register/unregister when we don't have a ->request_fn(), but we
should still do it for the ->mq_ops case.
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/blk-sysfs.c')
-rw-r--r-- | block/blk-sysfs.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index 3ce1217778f4..48032c4759a7 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c @@ -903,16 +903,15 @@ int blk_register_queue(struct gendisk *disk) blk_wb_init(q); - if (!q->request_fn) - return 0; - - ret = elv_register_queue(q); - if (ret) { - kobject_uevent(&q->kobj, KOBJ_REMOVE); - kobject_del(&q->kobj); - blk_trace_remove_sysfs(dev); - kobject_put(&dev->kobj); - return ret; + if (q->request_fn || (q->mq_ops && q->elevator)) { + ret = elv_register_queue(q); + if (ret) { + kobject_uevent(&q->kobj, KOBJ_REMOVE); + kobject_del(&q->kobj); + blk_trace_remove_sysfs(dev); + kobject_put(&dev->kobj); + return ret; + } } return 0; @@ -928,7 +927,7 @@ void blk_unregister_queue(struct gendisk *disk) if (q->mq_ops) blk_mq_unregister_dev(disk_to_dev(disk), q); - if (q->request_fn) + if (q->request_fn || (q->mq_ops && q->elevator)) elv_unregister_queue(q); kobject_uevent(&q->kobj, KOBJ_REMOVE); |