Commit 80c6b157 authored by Omar Sandoval's avatar Omar Sandoval Committed by Jens Axboe

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: default avatarOmar Sandoval <osandov@fb.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent e980f623
...@@ -903,16 +903,15 @@ int blk_register_queue(struct gendisk *disk) ...@@ -903,16 +903,15 @@ int blk_register_queue(struct gendisk *disk)
blk_wb_init(q); blk_wb_init(q);
if (!q->request_fn) if (q->request_fn || (q->mq_ops && q->elevator)) {
return 0; ret = elv_register_queue(q);
if (ret) {
ret = elv_register_queue(q); kobject_uevent(&q->kobj, KOBJ_REMOVE);
if (ret) { kobject_del(&q->kobj);
kobject_uevent(&q->kobj, KOBJ_REMOVE); blk_trace_remove_sysfs(dev);
kobject_del(&q->kobj); kobject_put(&dev->kobj);
blk_trace_remove_sysfs(dev); return ret;
kobject_put(&dev->kobj); }
return ret;
} }
return 0; return 0;
...@@ -928,7 +927,7 @@ void blk_unregister_queue(struct gendisk *disk) ...@@ -928,7 +927,7 @@ void blk_unregister_queue(struct gendisk *disk)
if (q->mq_ops) if (q->mq_ops)
blk_mq_unregister_dev(disk_to_dev(disk), q); 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); elv_unregister_queue(q);
kobject_uevent(&q->kobj, KOBJ_REMOVE); kobject_uevent(&q->kobj, KOBJ_REMOVE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment