aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/mtdchar.c5
-rw-r--r--drivers/mtd/mtdconcat.c2
-rw-r--r--drivers/mtd/mtdoops.c4
-rw-r--r--drivers/mtd/mtdswap.c4
-rw-r--r--drivers/mtd/nftlcore.c2
-rw-r--r--drivers/mtd/redboot.c4
-rw-r--r--drivers/mtd/tests/mtd_readtest.c3
-rw-r--r--drivers/mtd/tests/mtd_speedtest.c3
-rw-r--r--drivers/mtd/tests/mtd_stresstest.c3
-rw-r--r--drivers/mtd/tests/mtd_torturetest.c2
-rw-r--r--drivers/mtd/ubi/build.c2
-rw-r--r--include/linux/mtd/mtd.h7
12 files changed, 21 insertions, 20 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 92da621b1425..64efcbf087e9 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -867,10 +867,7 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
867 867
868 if (copy_from_user(&offs, argp, sizeof(loff_t))) 868 if (copy_from_user(&offs, argp, sizeof(loff_t)))
869 return -EFAULT; 869 return -EFAULT;
870 if (!mtd->block_isbad) 870 return mtd_block_isbad(mtd, offs);
871 ret = -EOPNOTSUPP;
872 else
873 return mtd_block_isbad(mtd, offs);
874 break; 871 break;
875 } 872 }
876 873
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c
index aaafb5e18765..fbf3cb124a93 100644
--- a/drivers/mtd/mtdconcat.c
+++ b/drivers/mtd/mtdconcat.c
@@ -647,7 +647,7 @@ static int concat_block_isbad(struct mtd_info *mtd, loff_t ofs)
647 struct mtd_concat *concat = CONCAT(mtd); 647 struct mtd_concat *concat = CONCAT(mtd);
648 int i, res = 0; 648 int i, res = 0;
649 649
650 if (!concat->subdev[0]->block_isbad) 650 if (!mtd_can_have_bb(concat->subdev[0]))
651 return res; 651 return res;
652 652
653 if (ofs > mtd->size) 653 if (ofs > mtd->size)
diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c
index c8540b8a7fc6..a4c8f67560e0 100644
--- a/drivers/mtd/mtdoops.c
+++ b/drivers/mtd/mtdoops.c
@@ -169,7 +169,7 @@ static void mtdoops_workfunc_erase(struct work_struct *work)
169 cxt->nextpage = 0; 169 cxt->nextpage = 0;
170 } 170 }
171 171
172 while (mtd->block_isbad) { 172 while (mtd_can_have_bb(mtd)) {
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;
@@ -257,7 +257,7 @@ static void find_next_position(struct mtdoops_context *cxt)
257 size_t retlen; 257 size_t retlen;
258 258
259 for (page = 0; page < cxt->oops_pages; page++) { 259 for (page = 0; page < cxt->oops_pages; page++) {
260 if (mtd->block_isbad && 260 if (mtd_can_have_bb(mtd) &&
261 mtd_block_isbad(mtd, page * record_size)) 261 mtd_block_isbad(mtd, page * record_size))
262 continue; 262 continue;
263 /* Assume the page is used */ 263 /* Assume the page is used */
diff --git a/drivers/mtd/mtdswap.c b/drivers/mtd/mtdswap.c
index fe4426c1c736..3fc8cb2756c0 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 && mtd_block_isbad(d->mtd, offset)) 346 if (mtd_can_have_bb(d->mtd) && 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;
@@ -1058,7 +1058,7 @@ static unsigned int mtdswap_badblocks(struct mtd_info *mtd, uint64_t size)
1058 1058
1059 badcnt = 0; 1059 badcnt = 0;
1060 1060
1061 if (mtd->block_isbad) 1061 if (mtd_can_have_bb(mtd))
1062 for (offset = 0; offset < size; offset += mtd->erasesize) 1062 for (offset = 0; offset < size; offset += mtd->erasesize)
1063 if (mtd_block_isbad(mtd, offset)) 1063 if (mtd_block_isbad(mtd, offset))
1064 badcnt++; 1064 badcnt++;
diff --git a/drivers/mtd/nftlcore.c b/drivers/mtd/nftlcore.c
index 8847e60ad167..a75382aff5f6 100644
--- a/drivers/mtd/nftlcore.c
+++ b/drivers/mtd/nftlcore.c
@@ -56,7 +56,7 @@ static void nftl_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
56 if (memcmp(mtd->name, "DiskOnChip", 10)) 56 if (memcmp(mtd->name, "DiskOnChip", 10))
57 return; 57 return;
58 58
59 if (!mtd->block_isbad) { 59 if (!mtd_can_have_bb(mtd)) {
60 printk(KERN_ERR 60 printk(KERN_ERR
61"NFTL no longer supports the old DiskOnChip drivers loaded via docprobe.\n" 61"NFTL no longer supports the old DiskOnChip drivers loaded via docprobe.\n"
62"Please use the new diskonchip driver under the NAND subsystem.\n"); 62"Please use the new diskonchip driver under the NAND subsystem.\n");
diff --git a/drivers/mtd/redboot.c b/drivers/mtd/redboot.c
index 09bb81ea3a7e..48970c14beff 100644
--- a/drivers/mtd/redboot.c
+++ b/drivers/mtd/redboot.c
@@ -78,7 +78,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
78 78
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 (mtd_can_have_bb(master) &&
82 mtd_block_isbad(master, offset)) { 82 mtd_block_isbad(master, offset)) {
83 if (!offset) { 83 if (!offset) {
84 nogood: 84 nogood:
@@ -89,7 +89,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
89 } 89 }
90 } else { 90 } else {
91 offset = directory * master->erasesize; 91 offset = directory * master->erasesize;
92 while (master->block_isbad && 92 while (mtd_can_have_bb(master) &&
93 mtd_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)
diff --git a/drivers/mtd/tests/mtd_readtest.c b/drivers/mtd/tests/mtd_readtest.c
index 4228eb4e54c7..121aba189cec 100644
--- a/drivers/mtd/tests/mtd_readtest.c
+++ b/drivers/mtd/tests/mtd_readtest.c
@@ -148,8 +148,7 @@ static int scan_for_bad_eraseblocks(void)
148 return -ENOMEM; 148 return -ENOMEM;
149 } 149 }
150 150
151 /* NOR flash does not implement block_isbad */ 151 if (!mtd_can_have_bb(mtd))
152 if (mtd->block_isbad == NULL)
153 return 0; 152 return 0;
154 153
155 printk(PRINT_PREF "scanning for bad eraseblocks\n"); 154 printk(PRINT_PREF "scanning for bad eraseblocks\n");
diff --git a/drivers/mtd/tests/mtd_speedtest.c b/drivers/mtd/tests/mtd_speedtest.c
index 4d2ed5c0807d..2aec4f3b72be 100644
--- a/drivers/mtd/tests/mtd_speedtest.c
+++ b/drivers/mtd/tests/mtd_speedtest.c
@@ -336,8 +336,7 @@ static int scan_for_bad_eraseblocks(void)
336 return -ENOMEM; 336 return -ENOMEM;
337 } 337 }
338 338
339 /* NOR flash does not implement block_isbad */ 339 if (!mtd_can_have_bb(mtd))
340 if (mtd->block_isbad == NULL)
341 goto out; 340 goto out;
342 341
343 printk(PRINT_PREF "scanning for bad eraseblocks\n"); 342 printk(PRINT_PREF "scanning for bad eraseblocks\n");
diff --git a/drivers/mtd/tests/mtd_stresstest.c b/drivers/mtd/tests/mtd_stresstest.c
index 399aa2bf220d..7b33f22d0b58 100644
--- a/drivers/mtd/tests/mtd_stresstest.c
+++ b/drivers/mtd/tests/mtd_stresstest.c
@@ -227,8 +227,7 @@ static int scan_for_bad_eraseblocks(void)
227 return -ENOMEM; 227 return -ENOMEM;
228 } 228 }
229 229
230 /* NOR flash does not implement block_isbad */ 230 if (!mtd_can_have_bb(mtd))
231 if (mtd->block_isbad == NULL)
232 return 0; 231 return 0;
233 232
234 printk(PRINT_PREF "scanning for bad eraseblocks\n"); 233 printk(PRINT_PREF "scanning for bad eraseblocks\n");
diff --git a/drivers/mtd/tests/mtd_torturetest.c b/drivers/mtd/tests/mtd_torturetest.c
index 557105f2ead3..b65861bc7b8e 100644
--- a/drivers/mtd/tests/mtd_torturetest.c
+++ b/drivers/mtd/tests/mtd_torturetest.c
@@ -290,7 +290,7 @@ static int __init tort_init(void)
290 * Check if there is a bad eraseblock among those we are going to test. 290 * Check if there is a bad eraseblock among those we are going to test.
291 */ 291 */
292 memset(&bad_ebs[0], 0, sizeof(int) * ebcnt); 292 memset(&bad_ebs[0], 0, sizeof(int) * ebcnt);
293 if (mtd->block_isbad) { 293 if (mtd_can_have_bb(mtd)) {
294 for (i = eb; i < eb + ebcnt; i++) { 294 for (i = eb; i < eb + ebcnt; i++) {
295 err = mtd_block_isbad(mtd, (loff_t)i * mtd->erasesize); 295 err = mtd_block_isbad(mtd, (loff_t)i * mtd->erasesize);
296 296
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 6c3fb5ab20f5..115749f20f9e 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -664,7 +664,7 @@ static int io_init(struct ubi_device *ubi)
664 ubi->peb_count = mtd_div_by_eb(ubi->mtd->size, ubi->mtd); 664 ubi->peb_count = mtd_div_by_eb(ubi->mtd->size, ubi->mtd);
665 ubi->flash_size = ubi->mtd->size; 665 ubi->flash_size = ubi->mtd->size;
666 666
667 if (ubi->mtd->block_isbad && ubi->mtd->block_markbad) 667 if (mtd_can_have_bb(ubi->mtd))
668 ubi->bad_allowed = 1; 668 ubi->bad_allowed = 1;
669 669
670 if (ubi->mtd->type == MTD_NORFLASH) { 670 if (ubi->mtd->type == MTD_NORFLASH) {
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 089370758fc9..7e35755f6931 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -440,6 +440,8 @@ static inline void mtd_resume(struct mtd_info *mtd)
440 440
441static inline int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs) 441static inline int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs)
442{ 442{
443 if (!mtd->block_isbad)
444 return -EOPNOTSUPP;
443 return mtd->block_isbad(mtd, ofs); 445 return mtd->block_isbad(mtd, ofs);
444} 446}
445 447
@@ -483,6 +485,11 @@ static inline int mtd_has_oob(const struct mtd_info *mtd)
483 return mtd->read_oob && mtd->write_oob; 485 return mtd->read_oob && mtd->write_oob;
484} 486}
485 487
488static inline int mtd_can_have_bb(const struct mtd_info *mtd)
489{
490 return !!mtd->block_isbad;
491}
492
486 /* Kernel-side ioctl definitions */ 493 /* Kernel-side ioctl definitions */
487 494
488struct mtd_partition; 495struct mtd_partition;