aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Bauer <mail@david-bauer.net>2020-03-07 22:45:55 +0100
committerDavid Bauer <mail@david-bauer.net>2020-03-07 22:49:55 +0100
commitfdfca33350150644481096f1c7a80db2b670cdec (patch)
tree8a58f6357bcaad663f409efe3b5ee636ec731f4c
parentab9fd528ae6380d78e5b6c4a6a18a2cc7c1cc785 (diff)
downloadupstream-fdfca33350150644481096f1c7a80db2b670cdec.tar.gz
upstream-fdfca33350150644481096f1c7a80db2b670cdec.tar.bz2
upstream-fdfca33350150644481096f1c7a80db2b670cdec.zip
Revert "kernel: rewrite run_parsers_by_type() to use add_mtd_partitions()"
This reverts commit 15a0701cdde8eeae2a54880b813cdb8cdc09a384. It was reported that this patch breaks on some cases the JFFS2 overlay filesystem on targets still using kernel 4.14. This includes ar71xx, where spurious erase of the ART was reported. Revert this commit for now. Re-adding should probaby also be done for every currently supported kernel version. Ref: FS#2837 FS#2862 FS#2864 Signed-off-by: David Bauer <mail@david-bauer.net>
-rw-r--r--target/linux/generic/pending-4.14/401-mtd-add-support-for-different-partition-parser-types.patch33
-rw-r--r--target/linux/generic/pending-4.14/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch4
-rw-r--r--target/linux/generic/pending-4.14/404-mtd-add-more-helper-functions.patch2
3 files changed, 24 insertions, 15 deletions
diff --git a/target/linux/generic/pending-4.14/401-mtd-add-support-for-different-partition-parser-types.patch b/target/linux/generic/pending-4.14/401-mtd-add-support-for-different-partition-parser-types.patch
index ae13112ef6..057d473684 100644
--- a/target/linux/generic/pending-4.14/401-mtd-add-support-for-different-partition-parser-types.patch
+++ b/target/linux/generic/pending-4.14/401-mtd-add-support-for-different-partition-parser-types.patch
@@ -20,35 +20,44 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
/*
* Given a pointer to the MTD object in the mtd_part structure, we can retrieve
-@@ -762,6 +766,27 @@ int mtd_del_partition(struct mtd_info *m
+@@ -762,6 +766,36 @@ int mtd_del_partition(struct mtd_info *m
}
EXPORT_SYMBOL_GPL(mtd_del_partition);
+static int
+run_parsers_by_type(struct mtd_part *slave, enum mtd_parser_type type)
+{
-+ struct mtd_partitions pparts = { };
-+ int err;
++ struct mtd_partition *parts;
++ int nr_parts;
++ int i;
+
-+ pparts.nr_parts = parse_mtd_partitions_by_type(&slave->mtd, type,
-+ &pparts.parts, NULL);
-+ if (pparts.nr_parts <= 0)
-+ return pparts.nr_parts;
++ nr_parts = parse_mtd_partitions_by_type(&slave->mtd, type, (const struct mtd_partition **)&parts,
++ NULL);
++ if (nr_parts <= 0)
++ return nr_parts;
+
-+ if (WARN_ON(!pparts.parts))
++ if (WARN_ON(!parts))
+ return 0;
+
-+ err = add_mtd_partitions(&slave->mtd, pparts.parts, pparts.nr_parts);
++ for (i = 0; i < nr_parts; i++) {
++ /* adjust partition offsets */
++ parts[i].offset += slave->offset;
+
-+ kfree(pparts.parts);
++ mtd_add_partition(slave->parent,
++ parts[i].name,
++ parts[i].offset,
++ parts[i].size);
++ }
++
++ kfree(parts);
+
-+ return err ? err : pparts.nr_parts;
++ return nr_parts;
+}
+
#ifdef CONFIG_MTD_SPLIT_FIRMWARE_NAME
#define SPLIT_FIRMWARE_NAME CONFIG_MTD_SPLIT_FIRMWARE_NAME
#else
-@@ -1147,6 +1172,61 @@ void mtd_part_parser_cleanup(struct mtd_
+@@ -1147,6 +1181,61 @@ void mtd_part_parser_cleanup(struct mtd_
}
}
diff --git a/target/linux/generic/pending-4.14/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch b/target/linux/generic/pending-4.14/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
index 149c328ac4..2cc06dd463 100644
--- a/target/linux/generic/pending-4.14/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
+++ b/target/linux/generic/pending-4.14/402-mtd-use-typed-mtd-parsers-for-rootfs-and-firmware-split.patch
@@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -795,6 +795,7 @@ run_parsers_by_type(struct mtd_part *sla
+@@ -804,6 +804,7 @@ run_parsers_by_type(struct mtd_part *sla
static void split_firmware(struct mtd_info *master, struct mtd_part *part)
{
@@ -18,7 +18,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
}
static void mtd_partition_split(struct mtd_info *master, struct mtd_part *part)
-@@ -804,6 +805,12 @@ static void mtd_partition_split(struct m
+@@ -813,6 +814,12 @@ static void mtd_partition_split(struct m
if (rootfs_found)
return;
diff --git a/target/linux/generic/pending-4.14/404-mtd-add-more-helper-functions.patch b/target/linux/generic/pending-4.14/404-mtd-add-more-helper-functions.patch
index d1a32872af..7b481ffb47 100644
--- a/target/linux/generic/pending-4.14/404-mtd-add-more-helper-functions.patch
+++ b/target/linux/generic/pending-4.14/404-mtd-add-more-helper-functions.patch
@@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
-@@ -1251,6 +1251,24 @@ int mtd_is_partition(const struct mtd_in
+@@ -1260,6 +1260,24 @@ int mtd_is_partition(const struct mtd_in
}
EXPORT_SYMBOL_GPL(mtd_is_partition);