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

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
Loading
Loading
Loading
Loading
+10 −11
Original line number Original line Diff line number Diff line
@@ -903,9 +903,7 @@ 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);
		ret = elv_register_queue(q);
		if (ret) {
		if (ret) {
			kobject_uevent(&q->kobj, KOBJ_REMOVE);
			kobject_uevent(&q->kobj, KOBJ_REMOVE);
@@ -914,6 +912,7 @@ int blk_register_queue(struct gendisk *disk)
			kobject_put(&dev->kobj);
			kobject_put(&dev->kobj);
			return ret;
			return ret;
		}
		}
	}


	return 0;
	return 0;
}
}
@@ -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);