diff options
author | Yauhen Kharuzhy <jekhor@gmail.com> | 2009-03-26 22:41:09 (GMT) |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-04-06 14:22:28 (GMT) |
commit | d8877f191e35718ba11a4d46950131e74c40566c (patch) | |
tree | 1c52c60c4ef35b11a4d74cea99159f562204bcb4 /drivers/mtd | |
parent | 7995c7e94ff4db2ddb865ab42cc5a2e6abbbd71a (diff) | |
download | linux-d8877f191e35718ba11a4d46950131e74c40566c.tar.xz |
[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>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/mtdpart.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 02ce38f..29675ed 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -48,8 +48,11 @@ static int part_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf) { struct mtd_part *part = PART(mtd); + struct mtd_ecc_stats stats; int res; + stats = part->master->ecc_stats; + if (from >= mtd->size) len = 0; 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); if (unlikely(res)) { if (res == -EUCLEAN) - mtd->ecc_stats.corrected++; + mtd->ecc_stats.corrected += part->master->ecc_stats.corrected - stats.corrected; if (res == -EBADMSG) - mtd->ecc_stats.failed++; + mtd->ecc_stats.failed += part->master->ecc_stats.failed - stats.failed; } return res; } |