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

Brian Norris computersforpeace at gmail.com
Mon May 12 19:28:52 PDT 2014


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 at 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



More information about the linux-mtd mailing list