From: Omar Sandoval Date: Mon, 6 Feb 2017 20:52:24 +0000 (-0800) Subject: blk-mq-sched: (un)register elevator when (un)registering queue X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=80c6b15732f0d8830032149cbcbc8d67e074b5e8;p=openwrt%2Fstaging%2Fblogic.git 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 Signed-off-by: Jens Axboe --- 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);