You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.2 KiB
74 lines
2.2 KiB
From 2c77c57d22adb05b21cdb333a0c42bdfa0e19835 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
Date: Tue, 16 Jan 2018 16:45:41 +0100
|
|
Subject: [PATCH] mtd: move code adding master MTD out of
|
|
mtd_add_device_partitions()
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
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: Rafał Miłecki <rafal@milecki.pl>
|
|
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
|
|
---
|
|
drivers/mtd/mtdcore.c | 25 +++++++++++++------------
|
|
1 file changed, 13 insertions(+), 12 deletions(-)
|
|
|
|
--- a/drivers/mtd/mtdcore.c
|
|
+++ b/drivers/mtd/mtdcore.c
|
|
@@ -631,20 +631,12 @@ static int mtd_add_device_partitions(str
|
|
{
|
|
const struct mtd_partition *real_parts = parts->parts;
|
|
int nbparts = parts->nr_parts;
|
|
- int ret;
|
|
|
|
- if (nbparts == 0 || IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) {
|
|
- ret = add_mtd_device(mtd);
|
|
- if (ret)
|
|
- return ret;
|
|
- }
|
|
+ if (!nbparts && !device_is_registered(&mtd->dev))
|
|
+ return add_mtd_device(mtd);
|
|
|
|
- if (nbparts > 0) {
|
|
- ret = add_mtd_partitions(mtd, real_parts, nbparts);
|
|
- if (ret && IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER))
|
|
- del_mtd_device(mtd);
|
|
- return ret;
|
|
- }
|
|
+ if (nbparts > 0)
|
|
+ return add_mtd_partitions(mtd, real_parts, nbparts);
|
|
|
|
return 0;
|
|
}
|
|
@@ -704,6 +696,12 @@ int mtd_device_parse_register(struct 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));
|
|
|
|
ret = parse_mtd_partitions(mtd, types, &parsed, parser_data);
|
|
@@ -743,6 +741,9 @@ int mtd_device_parse_register(struct mtd
|
|
out:
|
|
/* Cleanup any parsed partitions */
|
|
mtd_part_parser_cleanup(&parsed);
|
|
+ if (ret && device_is_registered(&mtd->dev))
|
|
+ del_mtd_device(mtd);
|
|
+
|
|
return ret;
|
|
}
|
|
EXPORT_SYMBOL_GPL(mtd_device_parse_register);
|
|
|