From: Scott Wood Date: Thu, 9 Sep 2010 20:40:03 +0000 (-0500) Subject: Followup fixes on the mtdparts spread patchset X-Git-Tag: v2010.12-rc1~138 X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-uboot.git;a=commitdiff_plain;h=36650ca9f16ac507bb0926d3a3ec5340986fcce0 Followup fixes on the mtdparts spread patchset Consolidate some code in mtd_get_len_incl_bad(), and fix a condition where a valid partition could be reported as truncated if it has a good block at the end of the device (unlikely, since the BBT is usually there). Fix mid-block declarations in net_part_size(). Signed-off-by: Scott Wood Reviewed-by: Ben Gardiner --- diff --git a/common/cmd_mtdparts.c b/common/cmd_mtdparts.c index 17865b756b..5481c885d3 100644 --- a/common/cmd_mtdparts.c +++ b/common/cmd_mtdparts.c @@ -1228,15 +1228,16 @@ static int generate_mtdparts_save(char *buf, u32 buflen) */ static uint64_t net_part_size(struct mtd_info *mtd, struct part_info *part) { + uint64_t i, net_size = 0; + if (!mtd->block_isbad) return part->size; - uint64_t i, net_size = 0; - for (i = 0; i < part->size; i += mtd->erasesize) { if (!mtd->block_isbad(mtd, part->offset + i)) net_size += mtd->erasesize; } + return net_size; } #endif diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 78f2a08541..a195ddab35 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -162,11 +162,6 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset, *truncated = 0; *len_incl_bad = 0; - if (offset >= mtd->size) { - *truncated = 1; - return; - } - if (!mtd->block_isbad) { *len_incl_bad = length; return; @@ -176,6 +171,11 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset, uint64_t block_len; while (len_excl_bad < length) { + if (offset >= mtd->size) { + *truncated = 1; + return; + } + block_len = mtd->erasesize - (offset & (mtd->erasesize - 1)); if (!mtd->block_isbad(mtd, offset & ~(mtd->erasesize - 1))) @@ -183,11 +183,6 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset, *len_incl_bad += block_len; offset += block_len; - - if (offset >= mtd->size) { - *truncated = 1; - break; - } } } #endif /* defined(CONFIG_CMD_MTDPARTS_SPREAD) */