mtd: nand: do not ignore all ECC errors

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Mon Nov 7 11:59:33 EST 2011


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=afa17de262633603dd65f89e9370f48e56b8c557
Commit:     afa17de262633603dd65f89e9370f48e56b8c557
Parent:     105513cc4a25522f959788371bd612f987d4d184
Author:     Brian Norris <computersforpeace at gmail.com>
AuthorDate: Wed Sep 7 13:13:29 2011 -0700
Committer:  Artem Bityutskiy <artem.bityutskiy at intel.com>
CommitDate: Sun Sep 11 16:48:49 2011 +0300

    mtd: nand: do not ignore all ECC errors
    
    There are a few reasons not to ignore ECC errors here.
    
    First, mtd->read_oob is being called in raw mode, so there should be no
    error correction in the first place.
    
    Second, if we change this such that there *is* error correction in this
    function, then we will want to pass the error message upward.
    
    In fact, the code I introduced to "ignore ECC errors" would have been
    better if it had just placed this test down in `scan_block_full()' in
    the first place. We would like to ignore ECC errors when we are simply
    checking for bad block markers (e.g., factory marked), but we may not
    want to ignore ECC errors when scanning OOB for a flash-based BBT
    pattern (in `scan_read_raw()'; note that the return codes from
    `scan_read_raw()' are not actually handled yet).
    
    Signed-off-by: Brian Norris <computersforpeace at gmail.com>
    Signed-off-by: Artem Bityutskiy <artem.bityutskiy at intel.com>
---
 drivers/mtd/nand/nand_bbt.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c
index cbf9b69..fcfaf06 100644
--- a/drivers/mtd/nand/nand_bbt.c
+++ b/drivers/mtd/nand/nand_bbt.c
@@ -313,8 +313,7 @@ static int scan_read_raw_oob(struct mtd_info *mtd, uint8_t *buf, loff_t offs,
 
 		res = mtd->read_oob(mtd, offs, &ops);
 
-		/* Ignore ECC errors when checking for BBM */
-		if (res && res != -EUCLEAN && res != -EBADMSG)
+		if (res)
 			return res;
 
 		buf += mtd->oobsize + mtd->writesize;
@@ -400,7 +399,8 @@ static int scan_block_full(struct mtd_info *mtd, struct nand_bbt_descr *bd,
 	int ret, j;
 
 	ret = scan_read_raw_oob(mtd, buf, offs, readlen);
-	if (ret)
+	/* Ignore ECC errors when checking for BBM */
+	if (ret && ret != -EUCLEAN && ret != -EBADMSG)
 		return ret;
 
 	for (j = 0; j < len; j++, buf += scanlen) {



More information about the linux-mtd-cvs mailing list