Re: [PATCH 4/4] mtd: Account for BBT blocks when a partition is being allocated

Brian Norris
2014-05-13T02:29:18Z

On Fri, Mar 21, 2014 at 08:57:44AM -0300, Ezequiel Garcia wrote:
> With the introduction of mtd_block_isreserved(), it's now possible
> to fix the bad and reserved block distribution exposed by ecc_stats,
> instead of accounting all the bad or reserved blocks as 'bad'.
>
> For instance, a device with eight blocks used for the BBT in the last
> partition would now show (getting ECC stats from sysfs):
>
> $ cat /sys/class/mtd/mtd2/ecc_stats

I assume you're actually using a wildcard instead of '2', since that's
more than one file's contents below.

> 0 0 10 0
> 0 0 4 0
> 0 0 0 8
>
> instead of the currently wrong stats:
>
> $ cat /sys/class/mtd/mtd2/ecc_stats
> 0 0 10 0
> 0 0 4 0
> 0 0 8 0
>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> drivers/mtd/mtdpart.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
> index 921e8c6..a3e3a7d 100644
> --- a/drivers/mtd/mtdpart.c
> +++ b/drivers/mtd/mtdpart.c
> @@ -535,7 +535,9 @@ static struct mtd_part *allocate_partition(struct mtd_info *master,
> uint64_t offs = 0;
>
> while (offs < slave->mtd.size) {
> - if (mtd_block_isbad(master, offs + slave->offset))
> + if (mtd_block_isreserved(master, offs + slave->offset))
> + slave->mtd.ecc_stats.bbtblocks++;
> + else if (mtd_block_isbad(master, offs + slave->offset))
> slave->mtd.ecc_stats.badblocks++;
> offs += slave->mtd.erasesize;
> }

Looks good. We've had some missing pieces here regarding the
reserved_blocks stat for a while.

Brian