aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/blk-sysfs.c21
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)
903 903
904 blk_wb_init(q); 904 blk_wb_init(q);
905 905
906 if (!q->request_fn) 906 if (q->request_fn || (q->mq_ops && q->elevator)) {
907 return 0; 907 ret = elv_register_queue(q);
908 908 if (ret) {
909 ret = elv_register_queue(q); 909 kobject_uevent(&q->kobj, KOBJ_REMOVE);
910 if (ret) { 910 kobject_del(&q->kobj);
911 kobject_uevent(&q->kobj, KOBJ_REMOVE); 911 blk_trace_remove_sysfs(dev);
912 kobject_del(&q->kobj); 912 kobject_put(&dev->kobj);
913 blk_trace_remove_sysfs(dev); 913 return ret;
914 kobject_put(&dev->kobj); 914 }
915 return ret;
916 } 915 }
917 916
918 return 0; 917 return 0;
@@ -928,7 +927,7 @@ void blk_unregister_queue(struct gendisk *disk)
928 if (q->mq_ops) 927 if (q->mq_ops)
929 blk_mq_unregister_dev(disk_to_dev(disk), q); 928 blk_mq_unregister_dev(disk_to_dev(disk), q);
930 929
931 if (q->request_fn) 930 if (q->request_fn || (q->mq_ops && q->elevator))
932 elv_unregister_queue(q); 931 elv_unregister_queue(q);
933 932
934 kobject_uevent(&q->kobj, KOBJ_REMOVE); 933 kobject_uevent(&q->kobj, KOBJ_REMOVE);