+++ /dev/null
---- a/drivers/mtd/mtdchar.c
-+++ b/drivers/mtd/mtdchar.c
-@@ -595,7 +595,10 @@
- /* Sanitize user input */
- p.devname[BLKPG_DEVNAMELTH - 1] = '\0';
-
-- return mtd_add_partition(mtd, p.devname, p.start, p.length);
-+ /* No mtd flags masking required */
-+ uint32_t mask_flags = 0;
-+
-+ return mtd_add_partition(mtd, p.devname, p.start, p.length, mask_flags);
-
- case BLKPG_DEL_PARTITION:
-
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -726,7 +726,7 @@
- }
-
- int mtd_add_partition(struct mtd_info *parent, const char *name,
-- long long offset, long long length)
-+ long long offset, long long length, uint32_t mask_flags)
- {
- struct mtd_partition part;
- struct mtd_part *new;
-@@ -747,6 +747,7 @@
- part.name = name;
- part.size = length;
- part.offset = offset;
-+ part.mask_flags = mask_flags;
-
- new = allocate_partition(parent, &part, -1, offset);
- if (IS_ERR(new))
-@@ -855,10 +856,14 @@
- /* adjust partition offsets */
- parts[i].offset += slave->offset;
-
-+ /* adjust partition mask */
-+ parts[i].mask_flags = !(slave->mtd.flags & MTD_WRITEABLE) ? MTD_WRITEABLE : 0;
-+
- mtd_add_partition(slave->parent,
- parts[i].name,
- parts[i].offset,
-- parts[i].size);
-+ parts[i].size,
-+ parts[i].mask_flags);
- }
-
- kfree(parts);
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -114,7 +114,7 @@
-
- int mtd_is_partition(const struct mtd_info *mtd);
- int mtd_add_partition(struct mtd_info *master, const char *name,
-- long long offset, long long length);
-+ long long offset, long long length, uint32_t mask_flags);
- int mtd_del_partition(struct mtd_info *master, int partno);
- struct mtd_info *mtdpart_get_master(const struct mtd_info *mtd);
- uint64_t mtdpart_get_offset(const struct mtd_info *mtd);
+++ /dev/null
---- a/drivers/mtd/mtdchar.c
-+++ b/drivers/mtd/mtdchar.c
-@@ -583,7 +583,10 @@
- /* Sanitize user input */
- p.devname[BLKPG_DEVNAMELTH - 1] = '\0';
-
-- return mtd_add_partition(mtd, p.devname, p.start, p.length);
-+ /* No mtd flags masking required */
-+ uint32_t mask_flags = 0;
-+
-+ return mtd_add_partition(mtd, p.devname, p.start, p.length, mask_flags);
-
- case BLKPG_DEL_PARTITION:
-
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -679,7 +679,7 @@
- }
-
- int mtd_add_partition(struct mtd_info *parent, const char *name,
-- long long offset, long long length)
-+ long long offset, long long length, uint32_t mask_flags)
- {
- struct mtd_partition part;
- struct mtd_part *new;
-@@ -700,6 +700,7 @@
- part.name = name;
- part.size = length;
- part.offset = offset;
-+ part.mask_flags = mask_flags;
-
- new = allocate_partition(parent, &part, -1, offset);
- if (IS_ERR(new))
-@@ -808,10 +809,14 @@
- /* adjust partition offsets */
- parts[i].offset += slave->offset;
-
-+ /* adjust partition mask */
-+ parts[i].mask_flags = !(slave->mtd.flags & MTD_WRITEABLE) ? MTD_WRITEABLE : 0;
-+
- mtd_add_partition(slave->parent,
- parts[i].name,
- parts[i].offset,
-- parts[i].size);
-+ parts[i].size,
-+ parts[i].mask_flags);
- }
-
- kfree(parts);
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -114,7 +114,7 @@
-
- int mtd_is_partition(const struct mtd_info *mtd);
- int mtd_add_partition(struct mtd_info *master, const char *name,
-- long long offset, long long length);
-+ long long offset, long long length, uint32_t mask_flags);
- int mtd_del_partition(struct mtd_info *master, int partno);
- struct mtd_info *mtdpart_get_master(const struct mtd_info *mtd);
- uint64_t mtdpart_get_offset(const struct mtd_info *mtd);