diff options
author | Boris BREZILLON <boris.brezillon@free-electrons.com> | 2016-03-07 04:46:51 -0500 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2016-03-07 19:23:09 -0500 |
commit | f5b8aa78ef086248145363bf1ffe5ca4348b6a98 (patch) | |
tree | e1cbe852ebab047c0acf6af3c7498b11d37d2786 | |
parent | 9ebfdf5b18493f338237ef9861a555c2f79b0c17 (diff) |
mtd: kill the ecclayout->oobavail field
ecclayout->oobavail is just redundant with the mtd->oobavail field.
Moreover, it prevents static const definition of ecc layouts since the
NAND framework is calculating this value based on the ecclayout->oobfree
field.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
-rw-r--r-- | drivers/mtd/devices/docg3.c | 5 | ||||
-rw-r--r-- | drivers/mtd/mtdswap.c | 16 | ||||
-rw-r--r-- | drivers/mtd/nand/brcmnand/brcmnand.c | 8 | ||||
-rw-r--r-- | drivers/mtd/nand/docg4.c | 1 | ||||
-rw-r--r-- | drivers/mtd/nand/hisi504_nand.c | 1 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 14 | ||||
-rw-r--r-- | drivers/mtd/onenand/onenand_base.c | 16 | ||||
-rw-r--r-- | drivers/mtd/tests/oobtest.c | 49 | ||||
-rw-r--r-- | drivers/staging/mt29f_spinand/mt29f_spinand.c | 1 | ||||
-rw-r--r-- | fs/jffs2/wbuf.c | 6 | ||||
-rw-r--r-- | include/linux/mtd/mtd.h | 1 |
11 files changed, 53 insertions, 65 deletions
diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c index c3a2695a4420..e7b2e439696c 100644 --- a/drivers/mtd/devices/docg3.c +++ b/drivers/mtd/devices/docg3.c | |||
@@ -72,13 +72,11 @@ MODULE_PARM_DESC(reliable_mode, "Set the docg3 mode (0=normal MLC, 1=fast, " | |||
72 | * @eccbytes: 8 bytes are used (1 for Hamming ECC, 7 for BCH ECC) | 72 | * @eccbytes: 8 bytes are used (1 for Hamming ECC, 7 for BCH ECC) |
73 | * @eccpos: ecc positions (byte 7 is Hamming ECC, byte 8-14 are BCH ECC) | 73 | * @eccpos: ecc positions (byte 7 is Hamming ECC, byte 8-14 are BCH ECC) |
74 | * @oobfree: free pageinfo bytes (byte 0 until byte 6, byte 15 | 74 | * @oobfree: free pageinfo bytes (byte 0 until byte 6, byte 15 |
75 | * @oobavail: 8 available bytes remaining after ECC toll | ||
76 | */ | 75 | */ |
77 | static struct nand_ecclayout docg3_oobinfo = { | 76 | static struct nand_ecclayout docg3_oobinfo = { |
78 | .eccbytes = 8, | 77 | .eccbytes = 8, |
79 | .eccpos = {7, 8, 9, 10, 11, 12, 13, 14}, | 78 | .eccpos = {7, 8, 9, 10, 11, 12, 13, 14}, |
80 | .oobfree = {{0, 7}, {15, 1} }, | 79 | .oobfree = {{0, 7}, {15, 1} }, |
81 | .oobavail = 8, | ||
82 | }; | 80 | }; |
83 | 81 | ||
84 | static inline u8 doc_readb(struct docg3 *docg3, u16 reg) | 82 | static inline u8 doc_readb(struct docg3 *docg3, u16 reg) |
@@ -1438,7 +1436,7 @@ static int doc_write_oob(struct mtd_info *mtd, loff_t ofs, | |||
1438 | oobdelta = mtd->oobsize; | 1436 | oobdelta = mtd->oobsize; |
1439 | break; | 1437 | break; |
1440 | case MTD_OPS_AUTO_OOB: | 1438 | case MTD_OPS_AUTO_OOB: |
1441 | oobdelta = mtd->ecclayout->oobavail; | 1439 | oobdelta = mtd->oobavail; |
1442 | break; | 1440 | break; |
1443 | default: | 1441 | default: |
1444 | return -EINVAL; | 1442 | return -EINVAL; |
@@ -1860,6 +1858,7 @@ static int __init doc_set_driver_info(int chip_id, struct mtd_info *mtd) | |||
1860 | mtd->_write_oob = doc_write_oob; | 1858 | mtd->_write_oob = doc_write_oob; |
1861 | mtd->_block_isbad = doc_block_isbad; | 1859 | mtd->_block_isbad = doc_block_isbad; |
1862 | mtd->ecclayout = &docg3_oobinfo; | 1860 | mtd->ecclayout = &docg3_oobinfo; |
1861 | mtd->oobavail = 8; | ||
1863 | mtd->ecc_strength = DOC_ECC_BCH_T; | 1862 | mtd->ecc_strength = DOC_ECC_BCH_T; |
1864 | 1863 | ||
1865 | return 0; | 1864 | return 0; |
diff --git a/drivers/mtd/mtdswap.c b/drivers/mtd/mtdswap.c index fc8b3d16cce7..d330eb1d3eba 100644 --- a/drivers/mtd/mtdswap.c +++ b/drivers/mtd/mtdswap.c | |||
@@ -346,7 +346,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb) | |||
346 | if (mtd_can_have_bb(d->mtd) && 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->oobavail; |
350 | ops.oobbuf = d->oob_buf; | 350 | ops.oobbuf = d->oob_buf; |
351 | ops.ooboffs = 0; | 351 | ops.ooboffs = 0; |
352 | ops.datbuf = NULL; | 352 | ops.datbuf = NULL; |
@@ -359,7 +359,7 @@ static int mtdswap_read_markers(struct mtdswap_dev *d, struct swap_eb *eb) | |||
359 | 359 | ||
360 | data = (struct mtdswap_oobdata *)d->oob_buf; | 360 | data = (struct mtdswap_oobdata *)d->oob_buf; |
361 | data2 = (struct mtdswap_oobdata *) | 361 | data2 = (struct mtdswap_oobdata *) |
362 | (d->oob_buf + d->mtd->ecclayout->oobavail); | 362 | (d->oob_buf + d->mtd->oobavail); |
363 | 363 | ||
364 | if (le16_to_cpu(data->magic) == MTDSWAP_MAGIC_CLEAN) { | 364 | if (le16_to_cpu(data->magic) == MTDSWAP_MAGIC_CLEAN) { |
365 | eb->erase_count = le32_to_cpu(data->count); | 365 | eb->erase_count = le32_to_cpu(data->count); |
@@ -933,7 +933,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d, | |||
933 | 933 | ||
934 | ops.mode = MTD_OPS_AUTO_OOB; | 934 | ops.mode = MTD_OPS_AUTO_OOB; |
935 | ops.len = mtd->writesize; | 935 | ops.len = mtd->writesize; |
936 | ops.ooblen = mtd->ecclayout->oobavail; | 936 | ops.ooblen = mtd->oobavail; |
937 | ops.ooboffs = 0; | 937 | ops.ooboffs = 0; |
938 | ops.datbuf = d->page_buf; | 938 | ops.datbuf = d->page_buf; |
939 | ops.oobbuf = d->oob_buf; | 939 | ops.oobbuf = d->oob_buf; |
@@ -945,7 +945,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d, | |||
945 | for (i = 0; i < mtd_pages; i++) { | 945 | for (i = 0; i < mtd_pages; i++) { |
946 | patt = mtdswap_test_patt(test + i); | 946 | patt = mtdswap_test_patt(test + i); |
947 | memset(d->page_buf, patt, mtd->writesize); | 947 | memset(d->page_buf, patt, mtd->writesize); |
948 | memset(d->oob_buf, patt, mtd->ecclayout->oobavail); | 948 | memset(d->oob_buf, patt, mtd->oobavail); |
949 | ret = mtd_write_oob(mtd, pos, &ops); | 949 | ret = mtd_write_oob(mtd, pos, &ops); |
950 | if (ret) | 950 | if (ret) |
951 | goto error; | 951 | goto error; |
@@ -964,7 +964,7 @@ static unsigned int mtdswap_eblk_passes(struct mtdswap_dev *d, | |||
964 | if (p1[j] != patt) | 964 | if (p1[j] != patt) |
965 | goto error; | 965 | goto error; |
966 | 966 | ||
967 | for (j = 0; j < mtd->ecclayout->oobavail; j++) | 967 | for (j = 0; j < mtd->oobavail; j++) |
968 | if (p2[j] != (unsigned char)patt) | 968 | if (p2[j] != (unsigned char)patt) |
969 | goto error; | 969 | goto error; |
970 | 970 | ||
@@ -1387,7 +1387,7 @@ static int mtdswap_init(struct mtdswap_dev *d, unsigned int eblocks, | |||
1387 | if (!d->page_buf) | 1387 | if (!d->page_buf) |
1388 | goto page_buf_fail; | 1388 | goto page_buf_fail; |
1389 | 1389 | ||
1390 | d->oob_buf = kmalloc(2 * mtd->ecclayout->oobavail, GFP_KERNEL); | 1390 | d->oob_buf = kmalloc(2 * mtd->oobavail, GFP_KERNEL); |
1391 | if (!d->oob_buf) | 1391 | if (!d->oob_buf) |
1392 | goto oob_buf_fail; | 1392 | goto oob_buf_fail; |
1393 | 1393 | ||
@@ -1454,10 +1454,10 @@ static void mtdswap_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd) | |||
1454 | return; | 1454 | return; |
1455 | } | 1455 | } |
1456 | 1456 | ||
1457 | if (!mtd->oobsize || oinfo->oobavail < MTDSWAP_OOBSIZE) { | 1457 | if (!mtd->oobsize || mtd->oobavail < MTDSWAP_OOBSIZE) { |
1458 | printk(KERN_ERR "%s: Not enough free bytes in OOB, " | 1458 | printk(KERN_ERR "%s: Not enough free bytes in OOB, " |
1459 | "%d available, %zu needed.\n", | 1459 | "%d available, %zu needed.\n", |
1460 | MTDSWAP_PREFIX, oinfo->oobavail, MTDSWAP_OOBSIZE); | 1460 | MTDSWAP_PREFIX, mtd->oobavail, MTDSWAP_OOBSIZE); |
1461 | return; | 1461 | return; |
1462 | } | 1462 | } |
1463 | 1463 | ||
diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c index f7009c1cb90c..e0528397306a 100644 --- a/drivers/mtd/nand/brcmnand/brcmnand.c +++ b/drivers/mtd/nand/brcmnand/brcmnand.c | |||
@@ -828,7 +828,8 @@ static struct nand_ecclayout *brcmnand_create_layout(int ecc_level, | |||
828 | idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1) | 828 | idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1) |
829 | break; | 829 | break; |
830 | } | 830 | } |
831 | goto out; | 831 | |
832 | return layout; | ||
832 | } | 833 | } |
833 | 834 | ||
834 | /* | 835 | /* |
@@ -879,10 +880,7 @@ static struct nand_ecclayout *brcmnand_create_layout(int ecc_level, | |||
879 | idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1) | 880 | idx2 >= MTD_MAX_OOBFREE_ENTRIES_LARGE - 1) |
880 | break; | 881 | break; |
881 | } | 882 | } |
882 | out: | 883 | |
883 | /* Sum available OOB */ | ||
884 | for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES_LARGE; i++) | ||
885 | layout->oobavail += layout->oobfree[i].length; | ||
886 | return layout; | 884 | return layout; |
887 | } | 885 | } |
888 | 886 | ||
diff --git a/drivers/mtd/nand/docg4.c b/drivers/mtd/nand/docg4.c index df4165b02c62..fb46fd7e056b 100644 --- a/drivers/mtd/nand/docg4.c +++ b/drivers/mtd/nand/docg4.c | |||
@@ -225,7 +225,6 @@ struct docg4_priv { | |||
225 | static struct nand_ecclayout docg4_oobinfo = { | 225 | static struct nand_ecclayout docg4_oobinfo = { |
226 | .eccbytes = 9, | 226 | .eccbytes = 9, |
227 | .eccpos = {7, 8, 9, 10, 11, 12, 13, 14, 15}, | 227 | .eccpos = {7, 8, 9, 10, 11, 12, 13, 14, 15}, |
228 | .oobavail = 5, | ||
229 | .oobfree = { {.offset = 2, .length = 5} } | 228 | .oobfree = { {.offset = 2, .length = 5} } |
230 | }; | 229 | }; |
231 | 230 | ||
diff --git a/drivers/mtd/nand/hisi504_nand.c b/drivers/mtd/nand/hisi504_nand.c index f8d37f36a81c..96502b624cfb 100644 --- a/drivers/mtd/nand/hisi504_nand.c +++ b/drivers/mtd/nand/hisi504_nand.c | |||
@@ -632,7 +632,6 @@ static void hisi_nfc_host_init(struct hinfc_host *host) | |||
632 | } | 632 | } |
633 | 633 | ||
634 | static struct nand_ecclayout nand_ecc_2K_16bits = { | 634 | static struct nand_ecclayout nand_ecc_2K_16bits = { |
635 | .oobavail = 6, | ||
636 | .oobfree = { {2, 6} }, | 635 | .oobfree = { {2, 6} }, |
637 | }; | 636 | }; |
638 | 637 | ||
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 596a9b0503da..53993df0c25a 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -2076,7 +2076,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from, | |||
2076 | stats = mtd->ecc_stats; | 2076 | stats = mtd->ecc_stats; |
2077 | 2077 | ||
2078 | if (ops->mode == MTD_OPS_AUTO_OOB) | 2078 | if (ops->mode == MTD_OPS_AUTO_OOB) |
2079 | len = chip->ecc.layout->oobavail; | 2079 | len = mtd->oobavail; |
2080 | else | 2080 | else |
2081 | len = mtd->oobsize; | 2081 | len = mtd->oobsize; |
2082 | 2082 | ||
@@ -2767,7 +2767,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to, | |||
2767 | __func__, (unsigned int)to, (int)ops->ooblen); | 2767 | __func__, (unsigned int)to, (int)ops->ooblen); |
2768 | 2768 | ||
2769 | if (ops->mode == MTD_OPS_AUTO_OOB) | 2769 | if (ops->mode == MTD_OPS_AUTO_OOB) |
2770 | len = chip->ecc.layout->oobavail; | 2770 | len = mtd->oobavail; |
2771 | else | 2771 | else |
2772 | len = mtd->oobsize; | 2772 | len = mtd->oobsize; |
2773 | 2773 | ||
@@ -4325,11 +4325,11 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
4325 | * The number of bytes available for a client to place data into | 4325 | * The number of bytes available for a client to place data into |
4326 | * the out of band area. | 4326 | * the out of band area. |
4327 | */ | 4327 | */ |
4328 | ecc->layout->oobavail = 0; | 4328 | mtd->oobavail = 0; |
4329 | for (i = 0; ecc->layout->oobfree[i].length | 4329 | if (ecc->layout) { |
4330 | && i < ARRAY_SIZE(ecc->layout->oobfree); i++) | 4330 | for (i = 0; ecc->layout->oobfree[i].length; i++) |
4331 | ecc->layout->oobavail += ecc->layout->oobfree[i].length; | 4331 | mtd->oobavail += ecc->layout->oobfree[i].length; |
4332 | mtd->oobavail = ecc->layout->oobavail; | 4332 | } |
4333 | 4333 | ||
4334 | /* ECC sanity check: warn if it's too weak */ | 4334 | /* ECC sanity check: warn if it's too weak */ |
4335 | if (!nand_ecc_strength_good(mtd)) | 4335 | if (!nand_ecc_strength_good(mtd)) |
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 652d01832873..df47537d1feb 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c | |||
@@ -1125,7 +1125,7 @@ static int onenand_mlc_read_ops_nolock(struct mtd_info *mtd, loff_t from, | |||
1125 | (int)len); | 1125 | (int)len); |
1126 | 1126 | ||
1127 | if (ops->mode == MTD_OPS_AUTO_OOB) | 1127 | if (ops->mode == MTD_OPS_AUTO_OOB) |
1128 | oobsize = this->ecclayout->oobavail; | 1128 | oobsize = mtd->oobavail; |
1129 | else | 1129 | else |
1130 | oobsize = mtd->oobsize; | 1130 | oobsize = mtd->oobsize; |
1131 | 1131 | ||
@@ -1230,7 +1230,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from, | |||
1230 | (int)len); | 1230 | (int)len); |
1231 | 1231 | ||
1232 | if (ops->mode == MTD_OPS_AUTO_OOB) | 1232 | if (ops->mode == MTD_OPS_AUTO_OOB) |
1233 | oobsize = this->ecclayout->oobavail; | 1233 | oobsize = mtd->oobavail; |
1234 | else | 1234 | else |
1235 | oobsize = mtd->oobsize; | 1235 | oobsize = mtd->oobsize; |
1236 | 1236 | ||
@@ -1365,7 +1365,7 @@ static int onenand_read_oob_nolock(struct mtd_info *mtd, loff_t from, | |||
1365 | ops->oobretlen = 0; | 1365 | ops->oobretlen = 0; |
1366 | 1366 | ||
1367 | if (mode == MTD_OPS_AUTO_OOB) | 1367 | if (mode == MTD_OPS_AUTO_OOB) |
1368 | oobsize = this->ecclayout->oobavail; | 1368 | oobsize = mtd->oobavail; |
1369 | else | 1369 | else |
1370 | oobsize = mtd->oobsize; | 1370 | oobsize = mtd->oobsize; |
1371 | 1371 | ||
@@ -1887,7 +1887,7 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to, | |||
1887 | return 0; | 1887 | return 0; |
1888 | 1888 | ||
1889 | if (ops->mode == MTD_OPS_AUTO_OOB) | 1889 | if (ops->mode == MTD_OPS_AUTO_OOB) |
1890 | oobsize = this->ecclayout->oobavail; | 1890 | oobsize = mtd->oobavail; |
1891 | else | 1891 | else |
1892 | oobsize = mtd->oobsize; | 1892 | oobsize = mtd->oobsize; |
1893 | 1893 | ||
@@ -2063,7 +2063,7 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to, | |||
2063 | ops->oobretlen = 0; | 2063 | ops->oobretlen = 0; |
2064 | 2064 | ||
2065 | if (mode == MTD_OPS_AUTO_OOB) | 2065 | if (mode == MTD_OPS_AUTO_OOB) |
2066 | oobsize = this->ecclayout->oobavail; | 2066 | oobsize = mtd->oobavail; |
2067 | else | 2067 | else |
2068 | oobsize = mtd->oobsize; | 2068 | oobsize = mtd->oobsize; |
2069 | 2069 | ||
@@ -4050,12 +4050,10 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) | |||
4050 | * The number of bytes available for a client to place data into | 4050 | * The number of bytes available for a client to place data into |
4051 | * the out of band area | 4051 | * the out of band area |
4052 | */ | 4052 | */ |
4053 | this->ecclayout->oobavail = 0; | 4053 | mtd->oobavail = 0; |
4054 | for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES && | 4054 | for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES && |
4055 | this->ecclayout->oobfree[i].length; i++) | 4055 | this->ecclayout->oobfree[i].length; i++) |
4056 | this->ecclayout->oobavail += | 4056 | mtd->oobavail += this->ecclayout->oobfree[i].length; |
4057 | this->ecclayout->oobfree[i].length; | ||
4058 | mtd->oobavail = this->ecclayout->oobavail; | ||
4059 | 4057 | ||
4060 | mtd->ecclayout = this->ecclayout; | 4058 | mtd->ecclayout = this->ecclayout; |
4061 | mtd->ecc_strength = 1; | 4059 | mtd->ecc_strength = 1; |
diff --git a/drivers/mtd/tests/oobtest.c b/drivers/mtd/tests/oobtest.c index 31762120eb56..1cb3f7758fb6 100644 --- a/drivers/mtd/tests/oobtest.c +++ b/drivers/mtd/tests/oobtest.c | |||
@@ -215,19 +215,19 @@ static int verify_eraseblock(int ebnum) | |||
215 | pr_info("ignoring error as within bitflip_limit\n"); | 215 | pr_info("ignoring error as within bitflip_limit\n"); |
216 | } | 216 | } |
217 | 217 | ||
218 | if (use_offset != 0 || use_len < mtd->ecclayout->oobavail) { | 218 | if (use_offset != 0 || use_len < mtd->oobavail) { |
219 | int k; | 219 | int k; |
220 | 220 | ||
221 | ops.mode = MTD_OPS_AUTO_OOB; | 221 | ops.mode = MTD_OPS_AUTO_OOB; |
222 | ops.len = 0; | 222 | ops.len = 0; |
223 | ops.retlen = 0; | 223 | ops.retlen = 0; |
224 | ops.ooblen = mtd->ecclayout->oobavail; | 224 | ops.ooblen = mtd->oobavail; |
225 | ops.oobretlen = 0; | 225 | ops.oobretlen = 0; |
226 | ops.ooboffs = 0; | 226 | ops.ooboffs = 0; |
227 | ops.datbuf = NULL; | 227 | ops.datbuf = NULL; |
228 | ops.oobbuf = readbuf; | 228 | ops.oobbuf = readbuf; |
229 | err = mtd_read_oob(mtd, addr, &ops); | 229 | err = mtd_read_oob(mtd, addr, &ops); |
230 | if (err || ops.oobretlen != mtd->ecclayout->oobavail) { | 230 | if (err || ops.oobretlen != mtd->oobavail) { |
231 | pr_err("error: readoob failed at %#llx\n", | 231 | pr_err("error: readoob failed at %#llx\n", |
232 | (long long)addr); | 232 | (long long)addr); |
233 | errcnt += 1; | 233 | errcnt += 1; |
@@ -244,7 +244,7 @@ static int verify_eraseblock(int ebnum) | |||
244 | /* verify post-(use_offset + use_len) area for 0xff */ | 244 | /* verify post-(use_offset + use_len) area for 0xff */ |
245 | k = use_offset + use_len; | 245 | k = use_offset + use_len; |
246 | bitflips += memffshow(addr, k, readbuf + k, | 246 | bitflips += memffshow(addr, k, readbuf + k, |
247 | mtd->ecclayout->oobavail - k); | 247 | mtd->oobavail - k); |
248 | 248 | ||
249 | if (bitflips > bitflip_limit) { | 249 | if (bitflips > bitflip_limit) { |
250 | pr_err("error: verify failed at %#llx\n", | 250 | pr_err("error: verify failed at %#llx\n", |
@@ -269,8 +269,8 @@ static int verify_eraseblock_in_one_go(int ebnum) | |||
269 | struct mtd_oob_ops ops; | 269 | struct mtd_oob_ops ops; |
270 | int err = 0; | 270 | int err = 0; |
271 | loff_t addr = (loff_t)ebnum * mtd->erasesize; | 271 | loff_t addr = (loff_t)ebnum * mtd->erasesize; |
272 | size_t len = mtd->ecclayout->oobavail * pgcnt; | 272 | size_t len = mtd->oobavail * pgcnt; |
273 | size_t oobavail = mtd->ecclayout->oobavail; | 273 | size_t oobavail = mtd->oobavail; |
274 | size_t bitflips; | 274 | size_t bitflips; |
275 | int i; | 275 | int i; |
276 | 276 | ||
@@ -394,8 +394,8 @@ static int __init mtd_oobtest_init(void) | |||
394 | goto out; | 394 | goto out; |
395 | 395 | ||
396 | use_offset = 0; | 396 | use_offset = 0; |
397 | use_len = mtd->ecclayout->oobavail; | 397 | use_len = mtd->oobavail; |
398 | use_len_max = mtd->ecclayout->oobavail; | 398 | use_len_max = mtd->oobavail; |
399 | vary_offset = 0; | 399 | vary_offset = 0; |
400 | 400 | ||
401 | /* First test: write all OOB, read it back and verify */ | 401 | /* First test: write all OOB, read it back and verify */ |
@@ -460,8 +460,8 @@ static int __init mtd_oobtest_init(void) | |||
460 | 460 | ||
461 | /* Write all eraseblocks */ | 461 | /* Write all eraseblocks */ |
462 | use_offset = 0; | 462 | use_offset = 0; |
463 | use_len = mtd->ecclayout->oobavail; | 463 | use_len = mtd->oobavail; |
464 | use_len_max = mtd->ecclayout->oobavail; | 464 | use_len_max = mtd->oobavail; |
465 | vary_offset = 1; | 465 | vary_offset = 1; |
466 | prandom_seed_state(&rnd_state, 5); | 466 | prandom_seed_state(&rnd_state, 5); |
467 | 467 | ||
@@ -471,8 +471,8 @@ static int __init mtd_oobtest_init(void) | |||
471 | 471 | ||
472 | /* Check all eraseblocks */ | 472 | /* Check all eraseblocks */ |
473 | use_offset = 0; | 473 | use_offset = 0; |
474 | use_len = mtd->ecclayout->oobavail; | 474 | use_len = mtd->oobavail; |
475 | use_len_max = mtd->ecclayout->oobavail; | 475 | use_len_max = mtd->oobavail; |
476 | vary_offset = 1; | 476 | vary_offset = 1; |
477 | prandom_seed_state(&rnd_state, 5); | 477 | prandom_seed_state(&rnd_state, 5); |
478 | err = verify_all_eraseblocks(); | 478 | err = verify_all_eraseblocks(); |
@@ -480,8 +480,8 @@ static int __init mtd_oobtest_init(void) | |||
480 | goto out; | 480 | goto out; |
481 | 481 | ||
482 | use_offset = 0; | 482 | use_offset = 0; |
483 | use_len = mtd->ecclayout->oobavail; | 483 | use_len = mtd->oobavail; |
484 | use_len_max = mtd->ecclayout->oobavail; | 484 | use_len_max = mtd->oobavail; |
485 | vary_offset = 0; | 485 | vary_offset = 0; |
486 | 486 | ||
487 | /* Fourth test: try to write off end of device */ | 487 | /* Fourth test: try to write off end of device */ |
@@ -501,7 +501,7 @@ static int __init mtd_oobtest_init(void) | |||
501 | ops.retlen = 0; | 501 | ops.retlen = 0; |
502 | ops.ooblen = 1; | 502 | ops.ooblen = 1; |
503 | ops.oobretlen = 0; | 503 | ops.oobretlen = 0; |
504 | ops.ooboffs = mtd->ecclayout->oobavail; | 504 | ops.ooboffs = mtd->oobavail; |
505 | ops.datbuf = NULL; | 505 | ops.datbuf = NULL; |
506 | ops.oobbuf = writebuf; | 506 | ops.oobbuf = writebuf; |
507 | pr_info("attempting to start write past end of OOB\n"); | 507 | pr_info("attempting to start write past end of OOB\n"); |
@@ -521,7 +521,7 @@ static int __init mtd_oobtest_init(void) | |||
521 | ops.retlen = 0; | 521 | ops.retlen = 0; |
522 | ops.ooblen = 1; | 522 | ops.ooblen = 1; |
523 | ops.oobretlen = 0; | 523 | ops.oobretlen = 0; |
524 | ops.ooboffs = mtd->ecclayout->oobavail; | 524 | ops.ooboffs = mtd->oobavail; |
525 | ops.datbuf = NULL; | 525 | ops.datbuf = NULL; |
526 | ops.oobbuf = readbuf; | 526 | ops.oobbuf = readbuf; |
527 | pr_info("attempting to start read past end of OOB\n"); | 527 | pr_info("attempting to start read past end of OOB\n"); |
@@ -543,7 +543,7 @@ static int __init mtd_oobtest_init(void) | |||
543 | ops.mode = MTD_OPS_AUTO_OOB; | 543 | ops.mode = MTD_OPS_AUTO_OOB; |
544 | ops.len = 0; | 544 | ops.len = 0; |
545 | ops.retlen = 0; | 545 | ops.retlen = 0; |
546 | ops.ooblen = mtd->ecclayout->oobavail + 1; | 546 | ops.ooblen = mtd->oobavail + 1; |
547 | ops.oobretlen = 0; | 547 | ops.oobretlen = 0; |
548 | ops.ooboffs = 0; | 548 | ops.ooboffs = 0; |
549 | ops.datbuf = NULL; | 549 | ops.datbuf = NULL; |
@@ -563,7 +563,7 @@ static int __init mtd_oobtest_init(void) | |||
563 | ops.mode = MTD_OPS_AUTO_OOB; | 563 | ops.mode = MTD_OPS_AUTO_OOB; |
564 | ops.len = 0; | 564 | ops.len = 0; |
565 | ops.retlen = 0; | 565 | ops.retlen = 0; |
566 | ops.ooblen = mtd->ecclayout->oobavail + 1; | 566 | ops.ooblen = mtd->oobavail + 1; |
567 | ops.oobretlen = 0; | 567 | ops.oobretlen = 0; |
568 | ops.ooboffs = 0; | 568 | ops.ooboffs = 0; |
569 | ops.datbuf = NULL; | 569 | ops.datbuf = NULL; |
@@ -587,7 +587,7 @@ static int __init mtd_oobtest_init(void) | |||
587 | ops.mode = MTD_OPS_AUTO_OOB; | 587 | ops.mode = MTD_OPS_AUTO_OOB; |
588 | ops.len = 0; | 588 | ops.len = 0; |
589 | ops.retlen = 0; | 589 | ops.retlen = 0; |
590 | ops.ooblen = mtd->ecclayout->oobavail; | 590 | ops.ooblen = mtd->oobavail; |
591 | ops.oobretlen = 0; | 591 | ops.oobretlen = 0; |
592 | ops.ooboffs = 1; | 592 | ops.ooboffs = 1; |
593 | ops.datbuf = NULL; | 593 | ops.datbuf = NULL; |
@@ -607,7 +607,7 @@ static int __init mtd_oobtest_init(void) | |||
607 | ops.mode = MTD_OPS_AUTO_OOB; | 607 | ops.mode = MTD_OPS_AUTO_OOB; |
608 | ops.len = 0; | 608 | ops.len = 0; |
609 | ops.retlen = 0; | 609 | ops.retlen = 0; |
610 | ops.ooblen = mtd->ecclayout->oobavail; | 610 | ops.ooblen = mtd->oobavail; |
611 | ops.oobretlen = 0; | 611 | ops.oobretlen = 0; |
612 | ops.ooboffs = 1; | 612 | ops.ooboffs = 1; |
613 | ops.datbuf = NULL; | 613 | ops.datbuf = NULL; |
@@ -638,7 +638,7 @@ static int __init mtd_oobtest_init(void) | |||
638 | for (i = 0; i < ebcnt - 1; ++i) { | 638 | for (i = 0; i < ebcnt - 1; ++i) { |
639 | int cnt = 2; | 639 | int cnt = 2; |
640 | int pg; | 640 | int pg; |
641 | size_t sz = mtd->ecclayout->oobavail; | 641 | size_t sz = mtd->oobavail; |
642 | if (bbt[i] || bbt[i + 1]) | 642 | if (bbt[i] || bbt[i + 1]) |
643 | continue; | 643 | continue; |
644 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; | 644 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; |
@@ -673,13 +673,12 @@ static int __init mtd_oobtest_init(void) | |||
673 | for (i = 0; i < ebcnt - 1; ++i) { | 673 | for (i = 0; i < ebcnt - 1; ++i) { |
674 | if (bbt[i] || bbt[i + 1]) | 674 | if (bbt[i] || bbt[i + 1]) |
675 | continue; | 675 | continue; |
676 | prandom_bytes_state(&rnd_state, writebuf, | 676 | prandom_bytes_state(&rnd_state, writebuf, mtd->oobavail * 2); |
677 | mtd->ecclayout->oobavail * 2); | ||
678 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; | 677 | addr = (loff_t)(i + 1) * mtd->erasesize - mtd->writesize; |
679 | ops.mode = MTD_OPS_AUTO_OOB; | 678 | ops.mode = MTD_OPS_AUTO_OOB; |
680 | ops.len = 0; | 679 | ops.len = 0; |
681 | ops.retlen = 0; | 680 | ops.retlen = 0; |
682 | ops.ooblen = mtd->ecclayout->oobavail * 2; | 681 | ops.ooblen = mtd->oobavail * 2; |
683 | ops.oobretlen = 0; | 682 | ops.oobretlen = 0; |
684 | ops.ooboffs = 0; | 683 | ops.ooboffs = 0; |
685 | ops.datbuf = NULL; | 684 | ops.datbuf = NULL; |
@@ -688,7 +687,7 @@ static int __init mtd_oobtest_init(void) | |||
688 | if (err) | 687 | if (err) |
689 | goto out; | 688 | goto out; |
690 | if (memcmpshow(addr, readbuf, writebuf, | 689 | if (memcmpshow(addr, readbuf, writebuf, |
691 | mtd->ecclayout->oobavail * 2)) { | 690 | mtd->oobavail * 2)) { |
692 | pr_err("error: verify failed at %#llx\n", | 691 | pr_err("error: verify failed at %#llx\n", |
693 | (long long)addr); | 692 | (long long)addr); |
694 | errcnt += 1; | 693 | errcnt += 1; |
diff --git a/drivers/staging/mt29f_spinand/mt29f_spinand.c b/drivers/staging/mt29f_spinand/mt29f_spinand.c index 197d1124733d..67283766710f 100644 --- a/drivers/staging/mt29f_spinand/mt29f_spinand.c +++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c | |||
@@ -49,7 +49,6 @@ static struct nand_ecclayout spinand_oob_64 = { | |||
49 | 17, 18, 19, 20, 21, 22, | 49 | 17, 18, 19, 20, 21, 22, |
50 | 33, 34, 35, 36, 37, 38, | 50 | 33, 34, 35, 36, 37, 38, |
51 | 49, 50, 51, 52, 53, 54, }, | 51 | 49, 50, 51, 52, 53, 54, }, |
52 | .oobavail = 32, | ||
53 | .oobfree = { | 52 | .oobfree = { |
54 | {.offset = 8, | 53 | {.offset = 8, |
55 | .length = 8}, | 54 | .length = 8}, |
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c index 5a3da3f52908..b25d28a21212 100644 --- a/fs/jffs2/wbuf.c +++ b/fs/jffs2/wbuf.c | |||
@@ -1183,22 +1183,20 @@ void jffs2_dirty_trigger(struct jffs2_sb_info *c) | |||
1183 | 1183 | ||
1184 | int jffs2_nand_flash_setup(struct jffs2_sb_info *c) | 1184 | int jffs2_nand_flash_setup(struct jffs2_sb_info *c) |
1185 | { | 1185 | { |
1186 | struct nand_ecclayout *oinfo = c->mtd->ecclayout; | ||
1187 | |||
1188 | if (!c->mtd->oobsize) | 1186 | if (!c->mtd->oobsize) |
1189 | return 0; | 1187 | return 0; |
1190 | 1188 | ||
1191 | /* Cleanmarker is out-of-band, so inline size zero */ | 1189 | /* Cleanmarker is out-of-band, so inline size zero */ |
1192 | c->cleanmarker_size = 0; | 1190 | c->cleanmarker_size = 0; |
1193 | 1191 | ||
1194 | if (!oinfo || oinfo->oobavail == 0) { | 1192 | if (c->mtd->oobavail == 0) { |
1195 | pr_err("inconsistent device description\n"); | 1193 | pr_err("inconsistent device description\n"); |
1196 | return -EINVAL; | 1194 | return -EINVAL; |
1197 | } | 1195 | } |
1198 | 1196 | ||
1199 | jffs2_dbg(1, "using OOB on NAND\n"); | 1197 | jffs2_dbg(1, "using OOB on NAND\n"); |
1200 | 1198 | ||
1201 | c->oobavail = oinfo->oobavail; | 1199 | c->oobavail = c->mtd->oobavail; |
1202 | 1200 | ||
1203 | /* Initialise write buffer */ | 1201 | /* Initialise write buffer */ |
1204 | init_rwsem(&c->wbuf_sem); | 1202 | init_rwsem(&c->wbuf_sem); |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index cc84923011c0..9cf13c4bccc8 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -105,7 +105,6 @@ struct mtd_oob_ops { | |||
105 | struct nand_ecclayout { | 105 | struct nand_ecclayout { |
106 | __u32 eccbytes; | 106 | __u32 eccbytes; |
107 | __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES_LARGE]; | 107 | __u32 eccpos[MTD_MAX_ECCPOS_ENTRIES_LARGE]; |
108 | __u32 oobavail; | ||
109 | struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES_LARGE]; | 108 | struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES_LARGE]; |
110 | }; | 109 | }; |
111 | 110 | ||