[MTD] mtdpart: Make ecc_stats more realistic.
In the existing implementation, ecc_stats fields are incremented only by one, regardless of master mtd errors number. For example, if there are N errors were corrected by ECC, partition ecc_stats.corrected will be incremented by one. This commit changes simple increment to sum of old value and parent mtd error count. Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
committed by
David Woodhouse
parent
7995c7e94f
commit
d8877f191e
@@ -48,8 +48,11 @@ static int part_read(struct mtd_info *mtd, loff_t from, size_t len,
|
|||||||
size_t *retlen, u_char *buf)
|
size_t *retlen, u_char *buf)
|
||||||
{
|
{
|
||||||
struct mtd_part *part = PART(mtd);
|
struct mtd_part *part = PART(mtd);
|
||||||
|
struct mtd_ecc_stats stats;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
stats = part->master->ecc_stats;
|
||||||
|
|
||||||
if (from >= mtd->size)
|
if (from >= mtd->size)
|
||||||
len = 0;
|
len = 0;
|
||||||
else if (from + len > mtd->size)
|
else if (from + len > mtd->size)
|
||||||
@@ -58,9 +61,9 @@ static int part_read(struct mtd_info *mtd, loff_t from, size_t len,
|
|||||||
len, retlen, buf);
|
len, retlen, buf);
|
||||||
if (unlikely(res)) {
|
if (unlikely(res)) {
|
||||||
if (res == -EUCLEAN)
|
if (res == -EUCLEAN)
|
||||||
mtd->ecc_stats.corrected++;
|
mtd->ecc_stats.corrected += part->master->ecc_stats.corrected - stats.corrected;
|
||||||
if (res == -EBADMSG)
|
if (res == -EBADMSG)
|
||||||
mtd->ecc_stats.failed++;
|
mtd->ecc_stats.failed += part->master->ecc_stats.failed - stats.failed;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user