[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