[PATCH 0/4] mtd: Fix wrong bad block account in ECC stats

Ezequiel Garcia
2014-03-21T11:58:36Z

This series addresses the wrong bad and bbt block accounting we currently
have in MTD.

Notice that this is a very old issue, probably around since the dawn of time,
and nobody seem to care much about it. However, with the introduction of
the sysfs ECC stats access, it's easier to access this stats and easier to
see the issue.

Currently, a device with eight blocks used for the BBT in the last partition
would show (getting ECC stats from sysfs):

$ cat /sys/class/mtd/mtd2/ecc_stats
0 0 10 0
0 0 4 0
0 0 8 0

The third column is the badblocks field in the ecc_stats structure. The
number of badblocks is obtained for each partition near the end of
allocate_partition(). The partition is scanned for badblocks and this
number is updated. This series fixes this by adding a check for BBT reserved
blocks, showing:

$ cat /sys/class/mtd/mtd2/ecc_stats
0 0 10 0
0 0 4 0
0 0 0 8

The first two patches have already been posted. I'm resending them here for
conveniency.

Ezequiel Garcia (4):
mtd: Add sysfs attr to expose ECC stats
mtd: nand: Account the blocks used by the BBT in the ecc_stats
mtd: Introduce mtd_block_isreserved()
mtd: Account for BBT blocks when a partition is being allocated

drivers/mtd/mtdcore.c | 24 ++++++++++++++++++++++++
drivers/mtd/mtdpart.c | 13 ++++++++++++-
drivers/mtd/nand/nand_base.c | 1 +
drivers/mtd/nand/nand_bbt.c | 16 ++++++++++++++++
include/linux/mtd/mtd.h | 2 ++
include/linux/mtd/nand.h | 1 +
6 files changed, 56 insertions(+), 1 deletion(-)

--
1.9.0