diff options
author | Rafał Miłecki <rafal@milecki.pl> | 2018-12-03 10:33:36 +0100 |
---|---|---|
committer | Rafał Miłecki <rafal@milecki.pl> | 2018-12-03 10:34:12 +0100 |
commit | e24983e710dd7a22909e26af1ad8ee8d027b5c71 (patch) | |
tree | cd385342a57b7bd8ecd2eeaf43138cd7ba1d5d1b /target/linux/generic/backport-4.14/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch | |
parent | 675eb747aa1cb76d4d6e715728592974acac8cc1 (diff) | |
download | upstream-e24983e710dd7a22909e26af1ad8ee8d027b5c71.tar.gz upstream-e24983e710dd7a22909e26af1ad8ee8d027b5c71.tar.bz2 upstream-e24983e710dd7a22909e26af1ad8ee8d027b5c71.zip |
kernel: backport 2 mtd partitioning fixes
This improves handling of subpartitions.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Diffstat (limited to 'target/linux/generic/backport-4.14/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch')
-rw-r--r-- | target/linux/generic/backport-4.14/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/target/linux/generic/backport-4.14/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch b/target/linux/generic/backport-4.14/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch new file mode 100644 index 0000000000..7f90cf946a --- /dev/null +++ b/target/linux/generic/backport-4.14/047-v4.21-mtd-keep-original-flags-for-every-struct-mtd_info.patch @@ -0,0 +1,58 @@ +From 1186af457cc186c5ed01708da71b1ffbdf0a2638 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> +Date: Tue, 20 Nov 2018 09:55:45 +0100 +Subject: [PATCH] mtd: keep original flags for every struct mtd_info +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When allocating a new partition mtd subsystem runs internal tests in the +allocate_partition(). They may result in modifying specified flags (e.g. +dropping some /features/ like write access). + +Those constraints don't have to be necessary true for subpartitions. It +may happen parent partition isn't block aligned (effectively disabling +write access) while subpartition may fit blocks nicely. In such case all +checks should be run again (starting with original flags value). + +Signed-off-by: Rafał Miłecki <rafal@milecki.pl> +Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> +--- + drivers/mtd/mtdcore.c | 2 ++ + drivers/mtd/mtdpart.c | 3 ++- + include/linux/mtd/mtd.h | 1 + + 3 files changed, 5 insertions(+), 1 deletion(-) + +--- a/drivers/mtd/mtdcore.c ++++ b/drivers/mtd/mtdcore.c +@@ -650,6 +650,8 @@ static void mtd_set_dev_defaults(struct + } else { + pr_debug("mtd device won't show a device symlink in sysfs\n"); + } ++ ++ mtd->orig_flags = mtd->flags; + } + + /** +--- a/drivers/mtd/mtdpart.c ++++ b/drivers/mtd/mtdpart.c +@@ -394,7 +394,8 @@ static struct mtd_part *allocate_partiti + + /* set up the MTD object for this partition */ + slave->mtd.type = parent->type; +- slave->mtd.flags = parent->flags & ~part->mask_flags; ++ slave->mtd.flags = parent->orig_flags & ~part->mask_flags; ++ slave->mtd.orig_flags = slave->mtd.flags; + slave->mtd.size = part->size; + slave->mtd.writesize = parent->writesize; + slave->mtd.writebufsize = parent->writebufsize; +--- a/include/linux/mtd/mtd.h ++++ b/include/linux/mtd/mtd.h +@@ -218,6 +218,7 @@ struct mtd_debug_info { + struct mtd_info { + u_char type; + uint32_t flags; ++ uint32_t orig_flags; /* Flags as before running mtd checks */ + uint64_t size; // Total size of the MTD + + /* "Major" erase size for the device. Naïve users may take this |