Skip to content

Commit

Permalink
mtd: nand: ignore ECC errors for simple BBM scans
Browse files Browse the repository at this point in the history
Now that nand_do_readoob() may return -EUCLEAN or -EBADMSG on ECC errors,
we need to handle the return value specially in some cases.

When scanning for simple bad block markers, reacting to an ECC error is
not very useful, as we assume that the relevant markers are still
non-0xFF for true bad blocks.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Artem Bityutskiy <dedekind1@gmail.com>
  • Loading branch information
Brian Norris authored and Artem Bityutskiy committed Sep 11, 2011
1 parent 51b11e3 commit 903cd06
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions drivers/mtd/nand/nand_bbt.c
Original file line number Diff line number Diff line change
Expand Up @@ -312,14 +312,20 @@ static int scan_read_raw_oob(struct mtd_info *mtd, uint8_t *buf, loff_t offs,
ops.oobbuf = buf + len;
ops.datbuf = buf;
ops.len = len;
return mtd->read_oob(mtd, offs, &ops);
res = mtd->read_oob(mtd, offs, &ops);

/* Ignore ECC errors when checking for BBM */
if (res != -EUCLEAN && res != -EBADMSG)
return res;
return 0;
} else {
ops.oobbuf = buf + mtd->writesize;
ops.datbuf = buf;
ops.len = mtd->writesize;
res = mtd->read_oob(mtd, offs, &ops);

if (res)
/* Ignore ECC errors when checking for BBM */
if (res && res != -EUCLEAN && res != -EBADMSG)
return res;
}

Expand Down Expand Up @@ -435,7 +441,8 @@ static int scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr *bd,
* byte reads for 16 bit buswidth.
*/
ret = mtd->read_oob(mtd, offs, &ops);
if (ret)
/* Ignore ECC errors when checking for BBM */
if (ret && ret != -EUCLEAN && ret != -EBADMSG)
return ret;

if (check_short_pattern(buf, bd))
Expand Down

0 comments on commit 903cd06

Please sign in to comment.