[MTD] mtdpart: Make ecc_stats more realistic.
authorYauhen Kharuzhy <jekhor@gmail.com>
Thu, 26 Mar 2009 22:41:09 +0000 (00:41 +0200)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 6 Apr 2009 14:22:28 +0000 (07:22 -0700)
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>
drivers/mtd/mtdpart.c

index 02ce38f..29675ed 100644 (file)
@@ -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;
 }