aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2011-12-23 12:35:30 -0500
committerDavid Woodhouse <David.Woodhouse@intel.com>2012-01-09 13:25:47 -0500
commit7086c19d07429d697057587caf1e5e0345442d16 (patch)
tree3a892182dba0847de32ef79b1fe1d46d8b1b5de8
parentead995f8d4da1e2f1ef40b0e5f4133fee38a3d3d (diff)
mtd: introduce mtd_block_isbad interface
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r--arch/cris/arch-v32/drivers/axisflashmap.c3
-rw-r--r--drivers/mtd/inftlmount.c3
-rw-r--r--drivers/mtd/mtdchar.c2
-rw-r--r--drivers/mtd/mtdconcat.c2
-rw-r--r--drivers/mtd/mtdoops.c4
-rw-r--r--drivers/mtd/mtdpart.c5
-rw-r--r--drivers/mtd/mtdswap.c4
-rw-r--r--drivers/mtd/nftlmount.c3
-rw-r--r--drivers/mtd/redboot.c4
-rw-r--r--drivers/mtd/ssfdc.c4
-rw-r--r--drivers/mtd/tests/mtd_oobtest.c2
-rw-r--r--drivers/mtd/tests/mtd_pagetest.c2
-rw-r--r--drivers/mtd/tests/mtd_readtest.c2
-rw-r--r--drivers/mtd/tests/mtd_speedtest.c2
-rw-r--r--drivers/mtd/tests/mtd_stresstest.c2
-rw-r--r--drivers/mtd/tests/mtd_subpagetest.c2
-rw-r--r--drivers/mtd/tests/mtd_torturetest.c3
-rw-r--r--drivers/mtd/ubi/io.c2
-rw-r--r--fs/jffs2/scan.c2
-rw-r--r--fs/logfs/dev_mtd.c4
-rw-r--r--include/linux/mtd/mtd.h7
21 files changed, 34 insertions, 30 deletions
diff --git a/arch/cris/arch-v32/drivers/axisflashmap.c b/arch/cris/arch-v32/drivers/axisflashmap.c
index 011bddbf073..b34438e026b 100644
--- a/arch/cris/arch-v32/drivers/axisflashmap.c
+++ b/arch/cris/arch-v32/drivers/axisflashmap.c
@@ -404,8 +404,7 @@ static int __init init_axis_flash(void)
404 */ 404 */
405 int blockstat; 405 int blockstat;
406 do { 406 do {
407 blockstat = main_mtd->block_isbad(main_mtd, 407 blockstat = mtd_block_isbad(main_mtd, ptable_sector);
408 ptable_sector);
409 if (blockstat < 0) 408 if (blockstat < 0)
410 ptable_sector = 0; /* read error */ 409 ptable_sector = 0; /* read error */
411 else if (blockstat) 410 else if (blockstat)
diff --git a/drivers/mtd/inftlmount.c b/drivers/mtd/inftlmount.c
index 9bfbca5d88d..38519401196 100644
--- a/drivers/mtd/inftlmount.c
+++ b/drivers/mtd/inftlmount.c
@@ -306,7 +306,8 @@ static int find_boot_record(struct INFTLrecord *inftl)
306 /* If any of the physical eraseblocks are bad, don't 306 /* If any of the physical eraseblocks are bad, don't
307 use the unit. */ 307 use the unit. */
308 for (physblock = 0; physblock < inftl->EraseSize; physblock += inftl->mbd.mtd->erasesize) { 308 for (physblock = 0; physblock < inftl->EraseSize; physblock += inftl->mbd.mtd->erasesize) {
309 if (inftl->mbd.mtd->block_isbad(inftl->mbd.mtd, i * inftl->EraseSize + physblock)) 309 if (mtd_block_isbad(inftl->mbd.mtd,
310 i * inftl->EraseSize + physblock))
310 inftl->PUtable[i] = BLOCK_RESERVED; 311 inftl->PUtable[i] = BLOCK_RESERVED;
311 } 312 }
312 } 313 }
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 6d598b23cf3..a499bf7a821 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -886,7 +886,7 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
886 if (!mtd->block_isbad) 886 if (!mtd->block_isbad)
887 ret = -EOPNOTSUPP; 887 ret = -EOPNOTSUPP;
888 else 888 else
889 return mtd->block_isbad(mtd, offs); 889 return mtd_block_isbad(mtd, offs);
890 break; 890 break;
891 } 891 }
892 892
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c
index 4b7f825ce01..d0db5e61d5a 100644
--- a/drivers/mtd/mtdconcat.c
+++ b/drivers/mtd/mtdconcat.c
@@ -667,7 +667,7 @@ static int concat_block_isbad(struct mtd_info *mtd, loff_t ofs)
667 continue; 667 continue;
668 } 668 }
669 669
670 res = subdev->block_isbad(subdev, ofs); 670 res = mtd_block_isbad(subdev, ofs);
671 break; 671 break;
672 } 672 }
673 673
diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c
index 7be2018ffbc..bc43d2f7272 100644
--- a/drivers/mtd/mtdoops.c
+++ b/drivers/mtd/mtdoops.c
@@ -170,7 +170,7 @@ static void mtdoops_workfunc_erase(struct work_struct *work)
170 } 170 }
171 171
172 while (mtd->block_isbad) { 172 while (mtd->block_isbad) {
173 ret = mtd->block_isbad(mtd, cxt->nextpage * record_size); 173 ret = mtd_block_isbad(mtd, cxt->nextpage * record_size);
174 if (!ret) 174 if (!ret)
175 break; 175 break;
176 if (ret < 0) { 176 if (ret < 0) {
@@ -254,7 +254,7 @@ static void find_next_position(struct mtdoops_context *cxt)
254 254
255 for (page = 0; page < cxt->oops_pages; page++) { 255 for (page = 0; page < cxt->oops_pages; page++) {
256 if (mtd->block_isbad && 256 if (mtd->block_isbad &&
257 mtd->block_isbad(mtd, page * record_size)) 257 mtd_block_isbad(mtd, page * record_size))
258 continue; 258 continue;
259 /* Assume the page is used */ 259 /* Assume the page is used */
260 mark_page_used(cxt, page); 260 mark_page_used(cxt, page);
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index 8610750852a..0e7dfc79d33 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -322,7 +322,7 @@ static int part_block_isbad(struct mtd_info *mtd, loff_t ofs)
322 if (ofs >= mtd->size) 322 if (ofs >= mtd->size)
323 return -EINVAL; 323 return -EINVAL;
324 ofs += part->offset; 324 ofs += part->offset;
325 return part->master->block_isbad(part->master, ofs); 325 return mtd_block_isbad(part->master, ofs);
326} 326}
327 327
328static int part_block_markbad(struct mtd_info *mtd, loff_t ofs) 328static int part_block_markbad(struct mtd_info *mtd, loff_t ofs)
@@ -553,8 +553,7 @@ static struct mtd_part *allocate_partition(struct mtd_info *master,
553 uint64_t offs = 0; 553 uint64_t offs = 0;
554 554
555 while (offs < slave->mtd.size) { 555 while (offs < slave->mtd.size) {
556 if (master->block_isbad(master, 556 if (mtd_block_isbad(master, offs + slave->offset))
557 offs + slave->offset))
558 slave->mtd.ecc_stats.badblocks++; 557 slave->mtd.ecc_stats.badblocks++;
559 offs += slave->mtd.erasesize; 558 offs += slave->mtd.erasesize;
560 } 559 }
diff --git a/drivers/mtd/mtdswap.c b/drivers/mtd/mtdswap.c
index cb794e76101..87aa0a6323c 100644
--- a/drivers/mtd/mtdswap.c
+++ b/drivers/mtd/mtdswap.c
@@ -343,7 +343,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb)
343 offset = mtdswap_eb_offset(d, eb); 343 offset = mtdswap_eb_offset(d, eb);
344 344
345 /* Check first if the block is bad. */ 345 /* Check first if the block is bad. */
346 if (d->mtd->block_isbad && d->mtd->block_isbad(d->mtd, offset)) 346 if (d->mtd->block_isbad && mtd_block_isbad(d->mtd, offset))
347 return MTDSWAP_SCANNED_BAD; 347 return MTDSWAP_SCANNED_BAD;
348 348
349 ops.ooblen = 2 * d->mtd->ecclayout->oobavail; 349 ops.ooblen = 2 * d->mtd->ecclayout->oobavail;
@@ -1061,7 +1061,7 @@ static unsigned int mtdswap_badblocks(struct mtd_info *mtd, uint64_t size)
1061 1061
1062 if (mtd->block_isbad) 1062 if (mtd->block_isbad)
1063 for (offset = 0; offset < size; offset += mtd->erasesize) 1063 for (offset = 0; offset < size; offset += mtd->erasesize)
1064 if (mtd->block_isbad(mtd, offset)) 1064 if (mtd_block_isbad(mtd, offset))
1065 badcnt++; 1065 badcnt++;
1066 1066
1067 return badcnt; 1067 return badcnt;
diff --git a/drivers/mtd/nftlmount.c b/drivers/mtd/nftlmount.c
index b068dc8a366..156af9f8796 100644
--- a/drivers/mtd/nftlmount.c
+++ b/drivers/mtd/nftlmount.c
@@ -242,7 +242,8 @@ The new DiskOnChip driver already scanned the bad block table. Just query it.
242 if (buf[i & (SECTORSIZE - 1)] != 0xff) 242 if (buf[i & (SECTORSIZE - 1)] != 0xff)
243 nftl->ReplUnitTable[i] = BLOCK_RESERVED; 243 nftl->ReplUnitTable[i] = BLOCK_RESERVED;
244#endif 244#endif
245 if (nftl->mbd.mtd->block_isbad(nftl->mbd.mtd, i * nftl->EraseSize)) 245 if (mtd_block_isbad(nftl->mbd.mtd,
246 i * nftl->EraseSize))
246 nftl->ReplUnitTable[i] = BLOCK_RESERVED; 247 nftl->ReplUnitTable[i] = BLOCK_RESERVED;
247 } 248 }
248 249
diff --git a/drivers/mtd/redboot.c b/drivers/mtd/redboot.c
index 623d9b86d0d..09bb81ea3a7 100644
--- a/drivers/mtd/redboot.c
+++ b/drivers/mtd/redboot.c
@@ -79,7 +79,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
79 if ( directory < 0 ) { 79 if ( directory < 0 ) {
80 offset = master->size + directory * master->erasesize; 80 offset = master->size + directory * master->erasesize;
81 while (master->block_isbad && 81 while (master->block_isbad &&
82 master->block_isbad(master, offset)) { 82 mtd_block_isbad(master, offset)) {
83 if (!offset) { 83 if (!offset) {
84 nogood: 84 nogood:
85 printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n"); 85 printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
@@ -90,7 +90,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
90 } else { 90 } else {
91 offset = directory * master->erasesize; 91 offset = directory * master->erasesize;
92 while (master->block_isbad && 92 while (master->block_isbad &&
93 master->block_isbad(master, offset)) { 93 mtd_block_isbad(master, offset)) {
94 offset += master->erasesize; 94 offset += master->erasesize;
95 if (offset == master->size) 95 if (offset == master->size)
96 goto nogood; 96 goto nogood;
diff --git a/drivers/mtd/ssfdc.c b/drivers/mtd/ssfdc.c
index 0e688133835..ab2a52a039c 100644
--- a/drivers/mtd/ssfdc.c
+++ b/drivers/mtd/ssfdc.c
@@ -122,7 +122,7 @@ static int get_valid_cis_sector(struct mtd_info *mtd)
122 * is not SSFDC formatted 122