Skip to content

Commit

Permalink
mtd: fix master device identification for mtd repartition
Browse files Browse the repository at this point in the history
Function mtd_has_master renamed as mtd_is_partition to follow the function logic.
The patch fixes the problem of checking the right mtd device for partition creation.
To delete partition checking is not needed here so as it is done in mtd_del_partition.
By master we consider the mtd device which does not belong to any partition.

Signed-off-by: Roman Tereshonkov <roman.tereshonkov@nokia.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
Roman Tereshonkov authored and David Woodhouse committed Dec 3, 2010
1 parent e14feaf commit a7e93dc
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
8 changes: 4 additions & 4 deletions drivers/mtd/mtdchar.c
Original file line number Diff line number Diff line change
Expand Up @@ -522,10 +522,6 @@ static int mtd_blkpg_ioctl(struct mtd_info *mtd,
if (!capable(CAP_SYS_ADMIN))
return -EPERM;

/* Only master mtd device must be used to control partitions */
if (!mtd_is_master(mtd))
return -EINVAL;

if (copy_from_user(&a, arg, sizeof(struct blkpg_ioctl_arg)))
return -EFAULT;

Expand All @@ -535,6 +531,10 @@ static int mtd_blkpg_ioctl(struct mtd_info *mtd,
switch (a.op) {
case BLKPG_ADD_PARTITION:

/* Only master mtd device must be used to add partitions */
if (mtd_is_partition(mtd))
return -EINVAL;

return mtd_add_partition(mtd, p.devname, p.start, p.length);

case BLKPG_DEL_PARTITION:
Expand Down
10 changes: 5 additions & 5 deletions drivers/mtd/mtdpart.c
Original file line number Diff line number Diff line change
Expand Up @@ -720,19 +720,19 @@ int parse_mtd_partitions(struct mtd_info *master, const char **types,
}
EXPORT_SYMBOL_GPL(parse_mtd_partitions);

int mtd_is_master(struct mtd_info *mtd)
int mtd_is_partition(struct mtd_info *mtd)
{
struct mtd_part *part;
int nopart = 0;
int ispart = 0;

mutex_lock(&mtd_partitions_mutex);
list_for_each_entry(part, &mtd_partitions, list)
if (&part->mtd == mtd) {
nopart = 1;
ispart = 1;
break;
}
mutex_unlock(&mtd_partitions_mutex);

return nopart;
return ispart;
}
EXPORT_SYMBOL_GPL(mtd_is_master);
EXPORT_SYMBOL_GPL(mtd_is_partition);
2 changes: 1 addition & 1 deletion include/linux/mtd/partitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ static inline int mtd_has_cmdlinepart(void) { return 1; }
static inline int mtd_has_cmdlinepart(void) { return 0; }
#endif

int mtd_is_master(struct mtd_info *mtd);
int mtd_is_partition(struct mtd_info *mtd);
int mtd_add_partition(struct mtd_info *master, char *name,
long long offset, long long length);
int mtd_del_partition(struct mtd_info *master, int partno);
Expand Down

0 comments on commit a7e93dc

Please sign in to comment.