diff options
| -rw-r--r-- | common/cmd_mtdparts.c | 5 | ||||
| -rw-r--r-- | drivers/mtd/mtdcore.c | 15 | 
2 files changed, 8 insertions, 12 deletions
| diff --git a/common/cmd_mtdparts.c b/common/cmd_mtdparts.c index 17865b756..5481c885d 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 78f2a0854..a195ddab3 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) */ |