]> Pileus Git - ~andy/linux/blobdiff - drivers/mtd/nftlcore.c
mtd: introduce mtd_get_user_prot_info interface
[~andy/linux] / drivers / mtd / nftlcore.c
index 272e3c03e324cd76be93059b05206cebc37ca56e..8847e60ad167e9b38b840519ea512a9b24d4bdcb 100644 (file)
@@ -153,7 +153,7 @@ int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
        ops.oobbuf = buf;
        ops.datbuf = NULL;
 
-       res = mtd->read_oob(mtd, offs & ~mask, &ops);
+       res = mtd_read_oob(mtd, offs & ~mask, &ops);
        *retlen = ops.oobretlen;
        return res;
 }
@@ -174,7 +174,7 @@ int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
        ops.oobbuf = buf;
        ops.datbuf = NULL;
 
-       res = mtd->write_oob(mtd, offs & ~mask, &ops);
+       res = mtd_write_oob(mtd, offs & ~mask, &ops);
        *retlen = ops.oobretlen;
        return res;
 }
@@ -198,7 +198,7 @@ static int nftl_write(struct mtd_info *mtd, loff_t offs, size_t len,
        ops.datbuf = buf;
        ops.len = len;
 
-       res = mtd->write_oob(mtd, offs & ~mask, &ops);
+       res = mtd_write_oob(mtd, offs & ~mask, &ops);
        *retlen = ops.retlen;
        return res;
 }
@@ -423,12 +423,17 @@ static u16 NFTL_foldchain (struct NFTLrecord *nftl, unsigned thisVUC, unsigned p
                if (BlockMap[block] == BLOCK_NIL)
                        continue;
 
-               ret = mtd->read(mtd, (nftl->EraseSize * BlockMap[block]) + (block * 512),
-                               512, &retlen, movebuf);
-               if (ret < 0 && ret != -EUCLEAN) {
-                       ret = mtd->read(mtd, (nftl->EraseSize * BlockMap[block])
-                                       + (block * 512), 512, &retlen,
-                                       movebuf);
+               ret = mtd_read(mtd,
+                              (nftl->EraseSize * BlockMap[block]) + (block * 512),
+                              512,
+                              &retlen,
+                              movebuf);
+               if (ret < 0 && !mtd_is_bitflip(ret)) {
+                       ret = mtd_read(mtd,
+                                      (nftl->EraseSize * BlockMap[block]) + (block * 512),
+                                      512,
+                                      &retlen,
+                                      movebuf);
                        if (ret != -EIO)
                                printk("Error went away on retry.\n");
                }
@@ -771,9 +776,9 @@ static int nftl_readblock(struct mtd_blktrans_dev *mbd, unsigned long block,
        } else {
                loff_t ptr = (lastgoodEUN * nftl->EraseSize) + blockofs;
                size_t retlen;
-               int res = mtd->read(mtd, ptr, 512, &retlen, buffer);
+               int res = mtd_read(mtd, ptr, 512, &retlen, buffer);
 
-               if (res < 0 && res != -EUCLEAN)
+               if (res < 0 && !mtd_is_bitflip(res))
                        return -EIO;
        }
        return 0;