mtd: mtdpart: Support MTD_SIZE_REMAINING with unallocated memory area
authorAlexander Stein <alexander.stein@ew.tq-group.com>
Thu, 20 Feb 2025 14:58:07 +0000 (15:58 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 28 Feb 2025 14:37:49 +0000 (08:37 -0600)
If there is an unallocated memory area before the last, filling parting
the size calculation for MTD_SIZE_REMAINING does not take this hole
into account.
Fix this by calculating the remaining size just based on total size
and partition offset.

Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
drivers/mtd/mtdpart.c

index 88094b8..3f8edeb 100644 (file)
@@ -208,7 +208,7 @@ int mtd_parse_partitions(struct mtd_info *parent, const char **_mtdparts,
 {
        struct mtd_partition partition = {}, *parts;
        const char *mtdparts = *_mtdparts;
-       uint64_t cur_off = 0, cur_sz = 0;
+       uint64_t cur_off = 0;
        int nparts = 0;
        int ret, idx;
        u64 sz;
@@ -237,8 +237,7 @@ int mtd_parse_partitions(struct mtd_info *parent, const char **_mtdparts,
                        return ret;
 
                if (parts[idx].size == MTD_SIZE_REMAINING)
-                       parts[idx].size = parent->size - cur_sz;
-               cur_sz += parts[idx].size;
+                       parts[idx].size = parent->size - parts[idx].offset;
 
                sz = parts[idx].size;
                if (sz < parent->writesize || do_div(sz, parent->writesize)) {