/*
* Given a pointer to the MTD object in the mtd_part structure, we can retrieve
* the pointer to that structure.
-@@ -687,6 +691,7 @@ int mtd_add_partition(struct mtd_info *p
- mutex_unlock(&mtd_partitions_mutex);
+@@ -661,6 +665,7 @@ int mtd_add_partition(struct mtd_info *p
+ if (ret)
+ goto err_remove_part;
- add_mtd_device(&new->mtd);
+ mtd_partition_split(parent, new);
-
mtd_add_partition_attrs(new);
-@@ -765,6 +770,35 @@ int mtd_del_partition(struct mtd_info *m
+ return 0;
+@@ -747,6 +752,35 @@ int mtd_del_partition(struct mtd_info *m
}
EXPORT_SYMBOL_GPL(mtd_del_partition);
/*
* This function, given a master MTD object and a partition table, creates
* and registers slave MTD objects which are bound to the master according to
-@@ -796,6 +830,7 @@ int add_mtd_partitions(struct mtd_info *
- mutex_unlock(&mtd_partitions_mutex);
+@@ -787,6 +821,7 @@ int add_mtd_partitions(struct mtd_info *
+ goto err_del_partitions;
+ }
- add_mtd_device(&slave->mtd);
+ mtd_partition_split(master, slave);
mtd_add_partition_attrs(slave);
- if (parts[i].types)
- mtd_parse_part(slave, parts[i].types);
+ /* Look for subpartitions */
+ parse_mtd_partitions(&slave->mtd, parts[i].types, NULL);
--- a/include/linux/mtd/partitions.h
+++ b/include/linux/mtd/partitions.h
@@ -110,5 +110,7 @@ int mtd_add_partition(struct mtd_info *m