Skip to content

Commit

Permalink
blk-mq-sched: (un)register elevator when (un)registering queue
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Omar Sandoval authored and Jens Axboe committed Feb 6, 2017
1 parent e980f62 commit 80c6b15
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions block/blk-sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down

0 comments on commit 80c6b15

Please sign in to comment.