[PATCH] mtd: spinand: Fix double counting of ECC stats

Miquel Raynal miquel.raynal at bootlin.com
Fri Jun 11 12:03:50 PDT 2021


On Thu, 2021-05-27 at 08:43:45 UTC, Miquel Raynal wrote:
> In the raw NAND world, ECC engines increment ecc_stats and the final
> caller is responsible for returning -EBADMSG if the verification
> failed.
> 
> In the SPI-NAND world it was a bit different until now because there was
> only one possible ECC engine: the on-die one. Indeed, the
> spinand_mtd_read() call was incrementing the ecc_stats counters
> depending on the outcome of spinand_check_ecc_status() directly.
> 
> So now let's split the logic like this:
> - spinand_check_ecc_status() is specific to the SPI-NAND on-die engine
>   and is kept very simple: it just returns the ECC status (bonus point:
>   the content of this helper can be overloaded).
> - spinand_ondie_ecc_finish_io_req() is the caller of
>   spinand_check_ecc_status() and will increment the counters and
>   eventually return -EBADMSG.
> - spinand_mtd_read() is not tied to the on-die ECC implementation and
>   should be able to handle results coming from other ECC engines: it has
>   the responsibility of returning the maximum number of bitflips which
>   happened during the entire operation as this is the only helper that
>   is aware that several pages may be read in a row.
> 
> Fixes: 945845b54c9c ("mtd: spinand: Instantiate a SPI-NAND on-die ECC engine")
> Reported-by: YouChing Lin <ycllin at mxic.com.tw>
> Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
> Tested-by: YouChing Lin <ycllin at mxic.com.tw>

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git nand/next.

Miquel



More information about the linux-mtd mailing list