Commit e9893e6f authored by Abhishek Sahu's avatar Abhishek Sahu Committed by Boris Brezillon

mtd: rawnand: fix return value check for bad block status

Positive return value from read_oob() is making false BAD
blocks. For some of the NAND controllers, OOB bytes will be
protected with ECC and read_oob() will return number of bitflips.
If there is any bitflip in ECC protected OOB bytes for BAD block
status page, then that block is getting treated as BAD.

Fixes: c120e75e ("mtd: nand: use read_oob() instead of cmdfunc() for bad block check")
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAbhishek Sahu <absahu@codeaurora.org>
Reviewed-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
parent 3f77f244
...@@ -440,7 +440,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs) ...@@ -440,7 +440,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs)
for (; page < page_end; page++) { for (; page < page_end; page++) {
res = chip->ecc.read_oob(mtd, chip, page); res = chip->ecc.read_oob(mtd, chip, page);
if (res) if (res < 0)
return res; return res;
bad = chip->oob_poi[chip->badblockpos]; bad = chip->oob_poi[chip->badblockpos];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment