summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorJason Liu <r64343@freescale.com>2008-03-25 21:57:06 -0500
committerAlan Tull <r80115@freescale.com>2010-08-25 11:50:59 -0500
commitabfb54a7ad06a0b2a1f96ea022312e9d3dd55101 (patch)
tree65ee3827dc2d2385241d999f5c273e01e9783567 /fs
parent51db0414056eb804d8a6fcd1b70c6b5c4707444a (diff)
ENGR00069937 Community patch for Fix mount error in case of MLC flash
Even though we don't use the OOB for MLC nand flash, we should use the bad block information to skip the bad block. Patch url: http://patchwork.ozlabs.org/linux-mtd/patch?q=mlc&filter=none&id=15477 Author:Kyungmin Park Signed-off-by: Jason Liu <r64343@freescale.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/jffs2/scan.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c
index 46f870d1cc36..a0d222496a3d 100644
--- a/fs/jffs2/scan.c
+++ b/fs/jffs2/scan.c
@@ -112,7 +112,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
if (!flashbuf) {
/* For NAND it's quicker to read a whole eraseblock at a time,
apparently */
- if (jffs2_cleanmarker_oob(c))
+ if (c->mtd->type == MTD_NANDFLASH)
buf_size = c->sector_size;
else
buf_size = PAGE_SIZE;
@@ -451,22 +451,24 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo
D1(printk(KERN_DEBUG "jffs2_scan_eraseblock(): Scanning block at 0x%x\n", ofs));
#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
- if (jffs2_cleanmarker_oob(c)) {
+ if (c->mtd->type == MTD_NANDFLASH) {
int ret;
if (c->mtd->block_isbad(c->mtd, jeb->offset))
return BLK_STATE_BADBLOCK;
- ret = jffs2_check_nand_cleanmarker(c, jeb);
- D2(printk(KERN_NOTICE "jffs_check_nand_cleanmarker returned %d\n",ret));
+ if (jffs2_cleanmarker_oob(c)) {
+ ret = jffs2_check_nand_cleanmarker(c, jeb);
+ D2(printk(KERN_NOTICE "jffs_check_nand_cleanmarker returned %d\n", ret));
- /* Even if it's not found, we still scan to see
- if the block is empty. We use this information
- to decide whether to erase it or not. */
- switch (ret) {
- case 0: cleanmarkerfound = 1; break;
- case 1: break;
- default: return ret;
+ /* Even if it's not found, we still scan to see
+ if the block is empty. We use this information
+ to decide whether to erase it or not. */
+ switch (ret) {
+ case 0: cleanmarkerfound = 1; break;
+ case 1: break;
+ default: return ret;
+ }
}
}
#endif