123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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);
|