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:
parent
59a50d2de1
commit
36650ca9f1
@ -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)
|
static uint64_t net_part_size(struct mtd_info *mtd, struct part_info *part)
|
||||||
{
|
{
|
||||||
|
uint64_t i, net_size = 0;
|
||||||
|
|
||||||
if (!mtd->block_isbad)
|
if (!mtd->block_isbad)
|
||||||
return part->size;
|
return part->size;
|
||||||
|
|
||||||
uint64_t i, net_size = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < part->size; i += mtd->erasesize) {
|
for (i = 0; i < part->size; i += mtd->erasesize) {
|
||||||
if (!mtd->block_isbad(mtd, part->offset + i))
|
if (!mtd->block_isbad(mtd, part->offset + i))
|
||||||
net_size += mtd->erasesize;
|
net_size += mtd->erasesize;
|
||||||
}
|
}
|
||||||
|
|
||||||
return net_size;
|
return net_size;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -162,11 +162,6 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
|
|||||||
*truncated = 0;
|
*truncated = 0;
|
||||||
*len_incl_bad = 0;
|
*len_incl_bad = 0;
|
||||||
|
|
||||||
if (offset >= mtd->size) {
|
|
||||||
*truncated = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mtd->block_isbad) {
|
if (!mtd->block_isbad) {
|
||||||
*len_incl_bad = length;
|
*len_incl_bad = length;
|
||||||
return;
|
return;
|
||||||
@ -176,6 +171,11 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
|
|||||||
uint64_t block_len;
|
uint64_t block_len;
|
||||||
|
|
||||||
while (len_excl_bad < length) {
|
while (len_excl_bad < length) {
|
||||||
|
if (offset >= mtd->size) {
|
||||||
|
*truncated = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
block_len = mtd->erasesize - (offset & (mtd->erasesize - 1));
|
block_len = mtd->erasesize - (offset & (mtd->erasesize - 1));
|
||||||
|
|
||||||
if (!mtd->block_isbad(mtd, 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;
|
*len_incl_bad += block_len;
|
||||||
offset += block_len;
|
offset += block_len;
|
||||||
|
|
||||||
if (offset >= mtd->size) {
|
|
||||||
*truncated = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* defined(CONFIG_CMD_MTDPARTS_SPREAD) */
|
#endif /* defined(CONFIG_CMD_MTDPARTS_SPREAD) */
|
||||||
|
Loading…
Reference in New Issue
Block a user