Message ID | 1528880556-20348-1-git-send-email-absahu@codeaurora.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Delegated to: | Andy Gross |
Headers | show |
Hi Boris, On Wed, 13 Jun 2018 14:32:36 +0530, Abhishek Sahu <absahu@codeaurora.org> wrote: > 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: c120e75e0e7d ("mtd: nand: use read_oob() instead of cmdfunc() for bad block check") > Cc: <stable@vger.kernel.org> > Signed-off-by: Abhishek Sahu <absahu@codeaurora.org> > --- > drivers/mtd/nand/raw/nand_base.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c > index f28c3a5..4a73f73 100644 > --- a/drivers/mtd/nand/raw/nand_base.c > +++ b/drivers/mtd/nand/raw/nand_base.c > @@ -440,7 +440,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs) > > for (; page < page_end; page++) { > res = chip->ecc.read_oob(mtd, chip, page); > - if (res) > + if (res < 0) > return res; > > bad = chip->oob_poi[chip->badblockpos]; Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> I suppose this patch is a good candidate to be part of a future mtd/fixes PR? Regards, Miquèl -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 18 Jun 2018 15:57:57 +0200 Miquel Raynal <miquel.raynal@bootlin.com> wrote: > Hi Boris, > > On Wed, 13 Jun 2018 14:32:36 +0530, Abhishek Sahu > <absahu@codeaurora.org> wrote: > > > 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: c120e75e0e7d ("mtd: nand: use read_oob() instead of cmdfunc() for bad block check") > > Cc: <stable@vger.kernel.org> > > Signed-off-by: Abhishek Sahu <absahu@codeaurora.org> > > --- > > drivers/mtd/nand/raw/nand_base.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c > > index f28c3a5..4a73f73 100644 > > --- a/drivers/mtd/nand/raw/nand_base.c > > +++ b/drivers/mtd/nand/raw/nand_base.c > > @@ -440,7 +440,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs) > > > > for (; page < page_end; page++) { > > res = chip->ecc.read_oob(mtd, chip, page); > > - if (res) > > + if (res < 0) > > return res; > > > > bad = chip->oob_poi[chip->badblockpos]; > > Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> Applied. Thanks, Boris > > I suppose this patch is a good candidate to be part of a future > mtd/fixes PR? > > Regards, > Miquèl > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index f28c3a5..4a73f73 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -440,7 +440,7 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs) for (; page < page_end; page++) { res = chip->ecc.read_oob(mtd, chip, page); - if (res) + if (res < 0) return res; bad = chip->oob_poi[chip->badblockpos];
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: c120e75e0e7d ("mtd: nand: use read_oob() instead of cmdfunc() for bad block check") Cc: <stable@vger.kernel.org> Signed-off-by: Abhishek Sahu <absahu@codeaurora.org> --- drivers/mtd/nand/raw/nand_base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)