diff options
| -rw-r--r-- | block/blk-sysfs.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index 070d81bae1d5..002af836aa87 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c | |||
| @@ -902,17 +902,20 @@ int blk_register_queue(struct gendisk *disk) | |||
| 902 | if (ret) | 902 | if (ret) |
| 903 | return ret; | 903 | return ret; |
| 904 | 904 | ||
| 905 | if (q->mq_ops) | ||
| 906 | blk_mq_register_dev(dev, q); | ||
| 907 | |||
| 908 | /* Prevent changes through sysfs until registration is completed. */ | ||
| 909 | mutex_lock(&q->sysfs_lock); | ||
| 910 | |||
| 905 | ret = kobject_add(&q->kobj, kobject_get(&dev->kobj), "%s", "queue"); | 911 | ret = kobject_add(&q->kobj, kobject_get(&dev->kobj), "%s", "queue"); |
| 906 | if (ret < 0) { | 912 | if (ret < 0) { |
| 907 | blk_trace_remove_sysfs(dev); | 913 | blk_trace_remove_sysfs(dev); |
| 908 | return ret; | 914 | goto unlock; |
| 909 | } | 915 | } |
| 910 | 916 | ||
| 911 | kobject_uevent(&q->kobj, KOBJ_ADD); | 917 | kobject_uevent(&q->kobj, KOBJ_ADD); |
| 912 | 918 | ||
| 913 | if (q->mq_ops) | ||
| 914 | blk_mq_register_dev(dev, q); | ||
| 915 | |||
| 916 | blk_wb_init(q); | 919 | blk_wb_init(q); |
| 917 | 920 | ||
| 918 | if (q->request_fn || (q->mq_ops && q->elevator)) { | 921 | if (q->request_fn || (q->mq_ops && q->elevator)) { |
| @@ -922,11 +925,13 @@ int blk_register_queue(struct gendisk *disk) | |||
| 922 | kobject_del(&q->kobj); | 925 | kobject_del(&q->kobj); |
| 923 | blk_trace_remove_sysfs(dev); | 926 | blk_trace_remove_sysfs(dev); |
| 924 | kobject_put(&dev->kobj); | 927 | kobject_put(&dev->kobj); |
| 925 | return ret; | 928 | goto unlock; |
| 926 | } | 929 | } |
| 927 | } | 930 | } |
| 928 | 931 | ret = 0; | |
| 929 | return 0; | 932 | unlock: |
| 933 | mutex_unlock(&q->sysfs_lock); | ||
| 934 | return ret; | ||
| 930 | } | 935 | } |
| 931 | 936 | ||
| 932 | void blk_unregister_queue(struct gendisk *disk) | 937 | void blk_unregister_queue(struct gendisk *disk) |
