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 <scottwood@freescale.com>
Reviewed-by: Ben Gardiner <bengardiner@nanometrics.ca>
This commit is contained in:
Scott Wood 2010-09-09 15:40:03 -05:00
parent 59a50d2de1
commit 36650ca9f1
2 changed files with 8 additions and 12 deletions

View File

@ -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

View File

@ -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) */