/branches/18.06.1/target/linux/generic/backport-4.9/066-v4.17-0001-mtd-move-code-adding-master-MTD-out-of-mtd_add_devic.patch |
@@ -0,0 +1,74 @@ |
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); |