diff options
| -rw-r--r-- | block/blk-sysfs.c | 21 |
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); |
