/branches/18.06.1/target/linux/generic/backport-4.9/065-v4.13-0003-mtd-partitions-add-helper-for-deleting-partition.patch |
@@ -0,0 +1,119 @@ |
From 08263a9ae664b24fa777d20b365601534842b236 Mon Sep 17 00:00:00 2001 |
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> |
Date: Wed, 21 Jun 2017 08:26:42 +0200 |
Subject: [PATCH] mtd: partitions: add helper for deleting partition |
MIME-Version: 1.0 |
Content-Type: text/plain; charset=UTF-8 |
Content-Transfer-Encoding: 8bit |
|
There are two similar functions handling deletion. One handles single |
partition and another the whole MTD flash device. They share (duplicate) |
some code so it makes sense to add a small helper for that part. |
|
Function del_mtd_partitions has been moved a bit to keep all deleting |
stuff together. |
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl> |
Signed-off-by: Brian Norris <computersforpeace@gmail.com> |
--- |
drivers/mtd/mtdpart.c | 75 +++++++++++++++++++++++++++++---------------------- |
1 file changed, 43 insertions(+), 32 deletions(-) |
|
--- a/drivers/mtd/mtdpart.c |
+++ b/drivers/mtd/mtdpart.c |
@@ -363,32 +363,6 @@ static inline void free_partition(struct |
kfree(p); |
} |
|
-/* |
- * This function unregisters and destroy all slave MTD objects which are |
- * attached to the given master MTD object. |
- */ |
- |
-int del_mtd_partitions(struct mtd_info *master) |
-{ |
- struct mtd_part *slave, *next; |
- int ret, err = 0; |
- |
- mutex_lock(&mtd_partitions_mutex); |
- list_for_each_entry_safe(slave, next, &mtd_partitions, list) |
- if (slave->master == master) { |
- ret = del_mtd_device(&slave->mtd); |
- if (ret < 0) { |
- err = ret; |
- continue; |
- } |
- list_del(&slave->list); |
- free_partition(slave); |
- } |
- mutex_unlock(&mtd_partitions_mutex); |
- |
- return err; |
-} |
- |
static struct mtd_part *allocate_partition(struct mtd_info *master, |
const struct mtd_partition *part, int partno, |
uint64_t cur_offset) |
@@ -675,6 +649,48 @@ int mtd_add_partition(struct mtd_info *m |
} |
EXPORT_SYMBOL_GPL(mtd_add_partition); |
|
+/** |
+ * __mtd_del_partition - delete MTD partition |
+ * |
+ * @priv: internal MTD struct for partition to be deleted |
+ * |
+ * This function must be called with the partitions mutex locked. |
+ */ |
+static int __mtd_del_partition(struct mtd_part *priv) |
+{ |
+ int err; |
+ |
+ err = del_mtd_device(&priv->mtd); |
+ if (err) |
+ return err; |
+ |
+ list_del(&priv->list); |
+ free_partition(priv); |
+ |
+ return 0; |
+} |
+ |
+/* |
+ * This function unregisters and destroy all slave MTD objects which are |
+ * attached to the given master MTD object. |
+ */ |
+int del_mtd_partitions(struct mtd_info *master) |
+{ |
+ struct mtd_part *slave, *next; |
+ int ret, err = 0; |
+ |
+ mutex_lock(&mtd_partitions_mutex); |
+ list_for_each_entry_safe(slave, next, &mtd_partitions, list) |
+ if (slave->master == master) { |
+ ret = __mtd_del_partition(slave); |
+ if (ret < 0) |
+ err = ret; |
+ } |
+ mutex_unlock(&mtd_partitions_mutex); |
+ |
+ return err; |
+} |
+ |
int mtd_del_partition(struct mtd_info *master, int partno) |
{ |
struct mtd_part *slave, *next; |
@@ -686,12 +702,7 @@ int mtd_del_partition(struct mtd_info *m |
(slave->mtd.index == partno)) { |
sysfs_remove_files(&slave->mtd.dev.kobj, |
mtd_partition_attrs); |
- ret = del_mtd_device(&slave->mtd); |
- if (ret < 0) |
- break; |
- |
- list_del(&slave->list); |
- free_partition(slave); |
+ ret = __mtd_del_partition(slave); |
break; |
} |
mutex_unlock(&mtd_partitions_mutex); |