Skip to content

Commit

Permalink
mtd: partitions: add helper for deleting partition
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Brian Norris <[email protected]>
  • Loading branch information
Rafał Miłecki authored and computersforpeace committed Jun 22, 2017
1 parent 01f9c72 commit 08263a9
Showing 1 changed file with 43 additions and 32 deletions.
75 changes: 43 additions & 32 deletions drivers/mtd/mtdpart.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,32 +363,6 @@ static inline void free_partition(struct mtd_part *p)
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)
Expand Down Expand Up @@ -675,6 +649,48 @@ int mtd_add_partition(struct mtd_info *master, const char *name,
}
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;
Expand All @@ -686,12 +702,7 @@ int mtd_del_partition(struct mtd_info *master, int partno)
(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);
Expand Down

0 comments on commit 08263a9

Please sign in to comment.