Commit 2c77c57d authored by Rafał Miłecki's avatar Rafał Miłecki Committed by Boris Brezillon

mtd: move code adding master MTD out of mtd_add_device_partitions()

This change is a small cleanup of mtd_device_parse_register(). When
using MTD_PARTITIONED_MASTER it makes sure a master MTD is registered
before dealing with partitions. The advantage of this is not mixing
code handling master MTD with code handling partitions.

This commit doesn't change any behavior except from a slightly different
failure code path. The new code may need to call del_mtd_device when
something goes wrong.
Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
parent e6e620f0
...@@ -646,20 +646,12 @@ static int mtd_add_device_partitions(struct mtd_info *mtd, ...@@ -646,20 +646,12 @@ static int mtd_add_device_partitions(struct mtd_info *mtd,
{ {
const struct mtd_partition *real_parts = parts->parts; const struct mtd_partition *real_parts = parts->parts;
int nbparts = parts->nr_parts; int nbparts = parts->nr_parts;
int ret;
if (nbparts == 0 || IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) { if (!nbparts && !device_is_registered(&mtd->dev))
ret = add_mtd_device(mtd); return add_mtd_device(mtd);
if (ret)
return ret;
}
if (nbparts > 0) { if (nbparts > 0)
ret = add_mtd_partitions(mtd, real_parts, nbparts); return add_mtd_partitions(mtd, real_parts, nbparts);
if (ret && IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER))
del_mtd_device(mtd);
return ret;
}
return 0; return 0;
} }
...@@ -719,6 +711,12 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types, ...@@ -719,6 +711,12 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
mtd_set_dev_defaults(mtd); mtd_set_dev_defaults(mtd);
if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) {
ret = add_mtd_device(mtd);
if (ret)
return ret;
}
memset(&parsed, 0, sizeof(parsed)); memset(&parsed, 0, sizeof(parsed));
ret = parse_mtd_partitions(mtd, types, &parsed, parser_data); ret = parse_mtd_partitions(mtd, types, &parsed, parser_data);
...@@ -758,6 +756,9 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types, ...@@ -758,6 +756,9 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
out: out:
/* Cleanup any parsed partitions */ /* Cleanup any parsed partitions */
mtd_part_parser_cleanup(&parsed); mtd_part_parser_cleanup(&parsed);
if (ret && device_is_registered(&mtd->dev))
del_mtd_device(mtd);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(mtd_device_parse_register); EXPORT_SYMBOL_GPL(mtd_device_parse_register);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment