--- a/drivers/mtd/mtd_blkdevs.c
+++ b/drivers/mtd/mtd_blkdevs.c
-@@ -384,13 +384,6 @@ int add_mtd_blktrans_dev(struct mtd_blkt
+@@ -386,19 +386,8 @@ int add_mtd_blktrans_dev(struct mtd_blkt
if (new->readonly)
set_disk_ro(gd, 1);
-- device_add_disk(&new->mtd->dev, gd, NULL);
+- ret = device_add_disk(&new->mtd->dev, gd, NULL);
+- if (ret)
+- goto out_cleanup_disk;
-
- if (new->disk_attributes) {
- ret = sysfs_create_group(&disk_to_dev(gd)->kobj,
- }
return 0;
+-out_cleanup_disk:
+- put_disk(new->disk);
out_free_tag_set:
-@@ -402,6 +395,27 @@ out_list_del:
+ blk_mq_free_tag_set(new->tag_set);
+ out_kfree_tag_set:
+@@ -408,6 +397,35 @@ out_list_del:
return ret;
}
+ if (disk_live(dev->disk))
+ continue;
+
-+ device_add_disk(&dev->mtd->dev, dev->disk, NULL);
++ ret = device_add_disk(&dev->mtd->dev, dev->disk, NULL);
++ if (ret)
++ goto out_cleanup_disk;
++
+ if (dev->disk_attributes) {
+ ret = sysfs_create_group(&disk_to_dev(dev->disk)->kobj,
+ dev->disk_attributes);
+ }
+ }
+ }
++
++ return;
++
++out_cleanup_disk:
++ put_disk(dev->disk);
+}
+
int del_mtd_blktrans_dev(struct mtd_blktrans_dev *old)
#include "mtdcore.h"
-@@ -1082,6 +1083,8 @@ int mtd_device_parse_register(struct mtd
+@@ -1074,6 +1075,8 @@ int mtd_device_parse_register(struct mtd
register_reboot_notifier(&mtd->reboot_notifier);
}