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.st...@ew.tq-group.com>
---
 drivers/mtd/mtdpart.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index 4886392a1cf..4bc0960bb3c 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -207,7 +207,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;
@@ -236,8 +236,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)) {
-- 
2.43.0

Reply via email to