diff options
author | Boris Brezillon <boris.brezillon@bootlin.com> | 2018-02-12 16:03:11 -0500 |
---|---|---|
committer | Boris Brezillon <boris.brezillon@bootlin.com> | 2018-03-21 04:50:56 -0400 |
commit | e7bfb3fdbde3bfeeeb64e2d73ac6babe59519c9e (patch) | |
tree | f8aaed7657f3b7af86cdf2b5eade135e0f9f740b | |
parent | 8f347c4232d5fc097599b711a3385722a6834005 (diff) |
mtd: Stop updating erase_info->state and calling mtd_erase_callback()
MTD users are no longer checking erase_info->state to determine if the
erase operation failed or succeeded. Moreover, mtd_erase_callback() is
now a NOP.
We can safely get rid of all mtd_erase_callback() calls and all
erase_info->state assignments. While at it, get rid of the
erase_info->state field, all MTD_ERASE_XXX definitions and the
mtd_erase_callback() function.
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: Richard Weinberger <richard@nod.at>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Bert Kenward <bkenward@solarflare.com>
---
Changes in v2:
- Address a few coding style issues (reported by Miquel)
- Remove comments that are no longer valid (reported by Miquel)
30 files changed, 23 insertions, 204 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index 5e1b68cbcd0a..d4c07b85f18e 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -1993,20 +1993,8 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, | |||
1993 | 1993 | ||
1994 | static int cfi_intelext_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) | 1994 | static int cfi_intelext_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) |
1995 | { | 1995 | { |
1996 | unsigned long ofs, len; | 1996 | return cfi_varsize_frob(mtd, do_erase_oneblock, instr->addr, |
1997 | int ret; | 1997 | instr->len, NULL); |
1998 | |||
1999 | ofs = instr->addr; | ||
2000 | len = instr->len; | ||
2001 | |||
2002 | ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL); | ||
2003 | if (ret) | ||
2004 | return ret; | ||
2005 | |||
2006 | instr->state = MTD_ERASE_DONE; | ||
2007 | mtd_erase_callback(instr); | ||
2008 | |||
2009 | return 0; | ||
2010 | } | 1998 | } |
2011 | 1999 | ||
2012 | static void cfi_intelext_sync (struct mtd_info *mtd) | 2000 | static void cfi_intelext_sync (struct mtd_info *mtd) |
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c index 56aa6b75213d..668e2cbc155b 100644 --- a/drivers/mtd/chips/cfi_cmdset_0002.c +++ b/drivers/mtd/chips/cfi_cmdset_0002.c | |||
@@ -2415,20 +2415,8 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, | |||
2415 | 2415 | ||
2416 | static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) | 2416 | static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) |
2417 | { | 2417 | { |
2418 | unsigned long ofs, len; | 2418 | return cfi_varsize_frob(mtd, do_erase_oneblock, instr->addr, |
2419 | int ret; | 2419 | instr->len, NULL); |
2420 | |||
2421 | ofs = instr->addr; | ||
2422 | len = instr->len; | ||
2423 | |||
2424 | ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL); | ||
2425 | if (ret) | ||
2426 | return ret; | ||
2427 | |||
2428 | instr->state = MTD_ERASE_DONE; | ||
2429 | mtd_erase_callback(instr); | ||
2430 | |||
2431 | return 0; | ||
2432 | } | 2420 | } |
2433 | 2421 | ||
2434 | 2422 | ||
@@ -2436,7 +2424,6 @@ static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr) | |||
2436 | { | 2424 | { |
2437 | struct map_info *map = mtd->priv; | 2425 | struct map_info *map = mtd->priv; |
2438 | struct cfi_private *cfi = map->fldrv_priv; | 2426 | struct cfi_private *cfi = map->fldrv_priv; |
2439 | int ret = 0; | ||
2440 | 2427 | ||
2441 | if (instr->addr != 0) | 2428 | if (instr->addr != 0) |
2442 | return -EINVAL; | 2429 | return -EINVAL; |
@@ -2444,14 +2431,7 @@ static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr) | |||
2444 | if (instr->len != mtd->size) | 2431 | if (instr->len != mtd->size) |
2445 | return -EINVAL; | 2432 | return -EINVAL; |
2446 | 2433 | ||
2447 | ret = do_erase_chip(map, &cfi->chips[0]); | 2434 | return do_erase_chip(map, &cfi->chips[0]); |
2448 | if (ret) | ||
2449 | return ret; | ||
2450 | |||
2451 | instr->state = MTD_ERASE_DONE; | ||
2452 | mtd_erase_callback(instr); | ||
2453 | |||
2454 | return 0; | ||
2455 | } | 2435 | } |
2456 | 2436 | ||
2457 | static int do_atmel_lock(struct map_info *map, struct flchip *chip, | 2437 | static int do_atmel_lock(struct map_info *map, struct flchip *chip, |
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c index 7d342965f392..7b7658a05036 100644 --- a/drivers/mtd/chips/cfi_cmdset_0020.c +++ b/drivers/mtd/chips/cfi_cmdset_0020.c | |||
@@ -965,9 +965,6 @@ static int cfi_staa_erase_varsize(struct mtd_info *mtd, | |||
965 | } | 965 | } |
966 | } | 966 | } |
967 | 967 | ||
968 | instr->state = MTD_ERASE_DONE; | ||
969 | mtd_erase_callback(instr); | ||
970 | |||
971 | return 0; | 968 | return 0; |
972 | } | 969 | } |
973 | 970 | ||
diff --git a/drivers/mtd/chips/map_ram.c b/drivers/mtd/chips/map_ram.c index 1cd0fff0e940..c37fce926864 100644 --- a/drivers/mtd/chips/map_ram.c +++ b/drivers/mtd/chips/map_ram.c | |||
@@ -131,8 +131,6 @@ static int mapram_erase (struct mtd_info *mtd, struct erase_info *instr) | |||
131 | allff = map_word_ff(map); | 131 | allff = map_word_ff(map); |
132 | for (i=0; i<instr->len; i += map_bankwidth(map)) | 132 | for (i=0; i<instr->len; i += map_bankwidth(map)) |
133 | map_write(map, allff, instr->addr + i); | 133 | map_write(map, allff, instr->addr + i); |
134 | instr->state = MTD_ERASE_DONE; | ||
135 | mtd_erase_callback(instr); | ||
136 | return 0; | 134 | return 0; |
137 | } | 135 | } |
138 | 136 | ||
diff --git a/drivers/mtd/devices/bcm47xxsflash.c b/drivers/mtd/devices/bcm47xxsflash.c index 6b84947cfbea..9baa81b8780c 100644 --- a/drivers/mtd/devices/bcm47xxsflash.c +++ b/drivers/mtd/devices/bcm47xxsflash.c | |||
@@ -68,7 +68,6 @@ static int bcm47xxsflash_poll(struct bcm47xxsflash *b47s, int timeout) | |||
68 | static int bcm47xxsflash_erase(struct mtd_info *mtd, struct erase_info *erase) | 68 | static int bcm47xxsflash_erase(struct mtd_info *mtd, struct erase_info *erase) |
69 | { | 69 | { |
70 | struct bcm47xxsflash *b47s = mtd->priv; | 70 | struct bcm47xxsflash *b47s = mtd->priv; |
71 | int err; | ||
72 | 71 | ||
73 | switch (b47s->type) { | 72 | switch (b47s->type) { |
74 | case BCM47XXSFLASH_TYPE_ST: | 73 | case BCM47XXSFLASH_TYPE_ST: |
@@ -89,13 +88,7 @@ static int bcm47xxsflash_erase(struct mtd_info *mtd, struct erase_info *erase) | |||
89 | break; | 88 | break; |
90 | } | 89 | } |
91 | 90 | ||
92 | err = bcm47xxsflash_poll(b47s, HZ); | 91 | return bcm47xxsflash_poll(b47s, HZ); |
93 | if (err) | ||
94 | erase->state = MTD_ERASE_FAILED; | ||
95 | else | ||
96 | erase->state = MTD_ERASE_DONE; | ||
97 | |||
98 | return err; | ||
99 | } | 92 | } |
100 | 93 | ||
101 | static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len, | 94 | static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len, |
diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c index bb0734600a07..c9e424993e37 100644 --- a/drivers/mtd/devices/block2mtd.c +++ b/drivers/mtd/devices/block2mtd.c | |||
@@ -88,17 +88,12 @@ static int block2mtd_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
88 | size_t len = instr->len; | 88 | size_t len = instr->len; |
89 | int err; | 89 | int err; |
90 | 90 | ||
91 | instr->state = MTD_ERASING; | ||
92 | mutex_lock(&dev->write_mutex); | 91 | mutex_lock(&dev->write_mutex); |
93 | err = _block2mtd_erase(dev, from, len); | 92 | err = _block2mtd_erase(dev, from, len); |
94 | mutex_unlock(&dev->write_mutex); | 93 | mutex_unlock(&dev->write_mutex); |
95 | if (err) { | 94 | if (err) |
96 | pr_err("erase failed err = %d\n", err); | 95 | pr_err("erase failed err = %d\n", err); |
97 | instr->state = MTD_ERASE_FAILED; | ||
98 | } else | ||
99 | instr->state = MTD_ERASE_DONE; | ||
100 | 96 | ||
101 | mtd_erase_callback(instr); | ||
102 | return err; | 97 | return err; |
103 | } | 98 | } |
104 | 99 | ||
diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c index a85af236b44d..c594fe5eac08 100644 --- a/drivers/mtd/devices/docg3.c +++ b/drivers/mtd/devices/docg3.c | |||
@@ -1191,39 +1191,27 @@ static int doc_erase(struct mtd_info *mtd, struct erase_info *info) | |||
1191 | { | 1191 | { |
1192 | struct docg3 *docg3 = mtd->priv; | 1192 | struct docg3 *docg3 = mtd->priv; |
1193 | uint64_t len; | 1193 | uint64_t len; |
1194 | int block0, block1, page, ret, ofs = 0; | 1194 | int block0, block1, page, ret = 0, ofs = 0; |
1195 | 1195 | ||
1196 | doc_dbg("doc_erase(from=%lld, len=%lld\n", info->addr, info->len); | 1196 | doc_dbg("doc_erase(from=%lld, len=%lld\n", info->addr, info->len); |
1197 | 1197 | ||
1198 | info->state = MTD_ERASE_PENDING; | ||
1199 | calc_block_sector(info->addr + info->len, &block0, &block1, &page, | 1198 | calc_block_sector(info->addr + info->len, &block0, &block1, &page, |
1200 | &ofs, docg3->reliable); | 1199 | &ofs, docg3->reliable); |
1201 | ret = -EINVAL; | ||
1202 | if (info->addr + info->len > mtd->size || page || ofs) | 1200 | if (info->addr + info->len > mtd->size || page || ofs) |
1203 | goto reset_err; | 1201 | return -EINVAL; |
1204 | 1202 | ||
1205 | ret = 0; | ||
1206 | calc_block_sector(info->addr, &block0, &block1, &page, &ofs, | 1203 | calc_block_sector(info->addr, &block0, &block1, &page, &ofs, |
1207 | docg3->reliable); | 1204 | docg3->reliable); |
1208 | mutex_lock(&docg3->cascade->lock); | 1205 | mutex_lock(&docg3->cascade->lock); |
1209 | doc_set_device_id(docg3, docg3->device_id); | 1206 | doc_set_device_id(docg3, docg3->device_id); |
1210 | doc_set_reliable_mode(docg3); | 1207 | doc_set_reliable_mode(docg3); |
1211 | for (len = info->len; !ret && len > 0; len -= mtd->erasesize) { | 1208 | for (len = info->len; !ret && len > 0; len -= mtd->erasesize) { |
1212 | info->state = MTD_ERASING; | ||
1213 | ret = doc_erase_block(docg3, block0, block1); | 1209 | ret = doc_erase_block(docg3, block0, block1); |
1214 | block0 += 2; | 1210 | block0 += 2; |
1215 | block1 += 2; | 1211 | block1 += 2; |
1216 | } | 1212 | } |
1217 | mutex_unlock(&docg3->cascade->lock); | 1213 | mutex_unlock(&docg3->cascade->lock); |
1218 | 1214 | ||
1219 | if (ret) | ||
1220 | goto reset_err; | ||
1221 | |||
1222 | info->state = MTD_ERASE_DONE; | ||
1223 | return 0; | ||
1224 | |||
1225 | reset_err: | ||
1226 | info->state = MTD_ERASE_FAILED; | ||
1227 | return ret; | 1215 | return ret; |
1228 | } | 1216 | } |
1229 | 1217 | ||
diff --git a/drivers/mtd/devices/lart.c b/drivers/mtd/devices/lart.c index 555b94406e0b..f67b653c17d7 100644 --- a/drivers/mtd/devices/lart.c +++ b/drivers/mtd/devices/lart.c | |||
@@ -414,10 +414,7 @@ static int flash_erase (struct mtd_info *mtd,struct erase_info *instr) | |||
414 | while (len) | 414 | while (len) |
415 | { | 415 | { |
416 | if (!erase_block (addr)) | 416 | if (!erase_block (addr)) |
417 | { | ||
418 | instr->state = MTD_ERASE_FAILED; | ||
419 | return (-EIO); | 417 | return (-EIO); |
420 | } | ||
421 | 418 | ||
422 | addr += mtd->eraseregions[i].erasesize; | 419 | addr += mtd->eraseregions[i].erasesize; |
423 | len -= mtd->eraseregions[i].erasesize; | 420 | len -= mtd->eraseregions[i].erasesize; |
@@ -425,9 +422,6 @@ static int flash_erase (struct mtd_info *mtd,struct erase_info *instr) | |||
425 | if (addr == mtd->eraseregions[i].offset + (mtd->eraseregions[i].erasesize * mtd->eraseregions[i].numblocks)) i++; | 422 | if (addr == mtd->eraseregions[i].offset + (mtd->eraseregions[i].erasesize * mtd->eraseregions[i].numblocks)) i++; |
426 | } | 423 | } |
427 | 424 | ||
428 | instr->state = MTD_ERASE_DONE; | ||
429 | mtd_erase_callback(instr); | ||
430 | |||
431 | return (0); | 425 | return (0); |
432 | } | 426 | } |
433 | 427 | ||
diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index 5dc8bd042cc5..aaaeaae01e1d 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c | |||
@@ -220,10 +220,6 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
220 | } | 220 | } |
221 | mutex_unlock(&priv->lock); | 221 | mutex_unlock(&priv->lock); |
222 | 222 | ||
223 | /* Inform MTD subsystem that erase is complete */ | ||
224 | instr->state = MTD_ERASE_DONE; | ||
225 | mtd_erase_callback(instr); | ||
226 | |||
227 | return 0; | 223 | return 0; |
228 | } | 224 | } |
229 | 225 | ||
diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c index 0bf4aeaf0cb8..46238796145f 100644 --- a/drivers/mtd/devices/mtdram.c +++ b/drivers/mtd/devices/mtdram.c | |||
@@ -60,8 +60,7 @@ static int ram_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
60 | if (check_offs_len(mtd, instr->addr, instr->len)) | 60 | if (check_offs_len(mtd, instr->addr, instr->len)) |
61 | return -EINVAL; | 61 | return -EINVAL; |
62 | memset((char *)mtd->priv + instr->addr, 0xff, instr->len); | 62 | memset((char *)mtd->priv + instr->addr, 0xff, instr->len); |
63 | instr->state = MTD_ERASE_DONE; | 63 | |
64 | mtd_erase_callback(instr); | ||
65 | return 0; | 64 | return 0; |
66 | } | 65 | } |
67 | 66 | ||
diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c index 7287696a21f9..9ee04b5f9311 100644 --- a/drivers/mtd/devices/phram.c +++ b/drivers/mtd/devices/phram.c | |||
@@ -39,13 +39,6 @@ static int phram_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
39 | 39 | ||
40 | memset(start + instr->addr, 0xff, instr->len); | 40 | memset(start + instr->addr, 0xff, instr->len); |
41 | 41 | ||
42 | /* | ||
43 | * This'll catch a few races. Free the thing before returning :) | ||
44 | * I don't feel at all ashamed. This kind of thing is possible anyway | ||
45 | * with flash, but unlikely. | ||
46 | */ | ||
47 | instr->state = MTD_ERASE_DONE; | ||
48 | mtd_erase_callback(instr); | ||
49 | return 0; | 42 | return 0; |
50 | } | 43 | } |
51 | 44 | ||
diff --git a/drivers/mtd/devices/pmc551.c b/drivers/mtd/devices/pmc551.c index cadea0620cd0..5d842cbca3de 100644 --- a/drivers/mtd/devices/pmc551.c +++ b/drivers/mtd/devices/pmc551.c | |||
@@ -184,12 +184,10 @@ static int pmc551_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
184 | } | 184 | } |
185 | 185 | ||
186 | out: | 186 | out: |
187 | instr->state = MTD_ERASE_DONE; | ||
188 | #ifdef CONFIG_MTD_PMC551_DEBUG | 187 | #ifdef CONFIG_MTD_PMC551_DEBUG |
189 | printk(KERN_DEBUG "pmc551_erase() done\n"); | 188 | printk(KERN_DEBUG "pmc551_erase() done\n"); |
190 | #endif | 189 | #endif |
191 | 190 | ||
192 | mtd_erase_callback(instr); | ||
193 | return 0; | 191 | return 0; |
194 | } | 192 | } |
195 | 193 | ||
diff --git a/drivers/mtd/devices/powernv_flash.c b/drivers/mtd/devices/powernv_flash.c index 26f9feaa5d17..c1312b141ae0 100644 --- a/drivers/mtd/devices/powernv_flash.c +++ b/drivers/mtd/devices/powernv_flash.c | |||
@@ -175,19 +175,11 @@ static int powernv_flash_erase(struct mtd_info *mtd, struct erase_info *erase) | |||
175 | { | 175 | { |
176 | int rc; | 176 | int rc; |
177 | 177 | ||
178 | erase->state = MTD_ERASING; | ||
179 | |||
180 | /* todo: register our own notifier to do a true async implementation */ | ||
181 | rc = powernv_flash_async_op(mtd, FLASH_OP_ERASE, erase->addr, | 178 | rc = powernv_flash_async_op(mtd, FLASH_OP_ERASE, erase->addr, |
182 | erase->len, NULL, NULL); | 179 | erase->len, NULL, NULL); |
183 | 180 | if (rc) | |
184 | if (rc) { | ||
185 | erase->fail_addr = erase->addr; | 181 | erase->fail_addr = erase->addr; |
186 | erase->state = MTD_ERASE_FAILED; | 182 | |
187 | } else { | ||
188 | erase->state = MTD_ERASE_DONE; | ||
189 | } | ||
190 | mtd_erase_callback(erase); | ||
191 | return rc; | 183 | return rc; |
192 | } | 184 | } |
193 | 185 | ||
diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c index 0ec85f316d24..10183ee4e12b 100644 --- a/drivers/mtd/devices/slram.c +++ b/drivers/mtd/devices/slram.c | |||
@@ -84,12 +84,7 @@ static int slram_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
84 | slram_priv_t *priv = mtd->priv; | 84 | slram_priv_t *priv = mtd->priv; |
85 | 85 | ||
86 | memset(priv->start + instr->addr, 0xff, instr->len); | 86 | memset(priv->start + instr->addr, 0xff, instr->len); |
87 | /* This'll catch a few races. Free the thing before returning :) | 87 | |
88 | * I don't feel at all ashamed. This kind of thing is possible anyway | ||
89 | * with flash, but unlikely. | ||
90 | */ | ||
91 | instr->state = MTD_ERASE_DONE; | ||
92 | mtd_erase_callback(instr); | ||
93 | return(0); | 88 | return(0); |
94 | } | 89 | } |
95 | 90 | ||
diff --git a/drivers/mtd/devices/spear_smi.c b/drivers/mtd/devices/spear_smi.c index ddf478976013..986f81d2f93e 100644 --- a/drivers/mtd/devices/spear_smi.c +++ b/drivers/mtd/devices/spear_smi.c | |||
@@ -518,7 +518,6 @@ static int spear_mtd_erase(struct mtd_info *mtd, struct erase_info *e_info) | |||
518 | /* preparing the command for flash */ | 518 | /* preparing the command for flash */ |
519 | ret = spear_smi_erase_sector(dev, bank, command, 4); | 519 | ret = spear_smi_erase_sector(dev, bank, command, 4); |
520 | if (ret) { | 520 | if (ret) { |
521 | e_info->state = MTD_ERASE_FAILED; | ||
522 | mutex_unlock(&flash->lock); | 521 | mutex_unlock(&flash->lock); |
523 | return ret; | 522 | return ret; |
524 | } | 523 | } |
@@ -527,8 +526,6 @@ static int spear_mtd_erase(struct mtd_info *mtd, struct erase_info *e_info) | |||
527 | } | 526 | } |
528 | 527 | ||
529 | mutex_unlock(&flash->lock); | 528 | mutex_unlock(&flash->lock); |
530 | e_info->state = MTD_ERASE_DONE; | ||
531 | mtd_erase_callback(e_info); | ||
532 | 529 | ||
533 | return 0; | 530 | return 0; |
534 | } | 531 | } |
diff --git a/drivers/mtd/devices/sst25l.c b/drivers/mtd/devices/sst25l.c index 5b84d71efb36..1897f33fe3e7 100644 --- a/drivers/mtd/devices/sst25l.c +++ b/drivers/mtd/devices/sst25l.c | |||
@@ -195,7 +195,6 @@ static int sst25l_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
195 | err = sst25l_erase_sector(flash, addr); | 195 | err = sst25l_erase_sector(flash, addr); |
196 | if (err) { | 196 | if (err) { |
197 | mutex_unlock(&flash->lock); | 197 | mutex_unlock(&flash->lock); |
198 | instr->state = MTD_ERASE_FAILED; | ||
199 | dev_err(&flash->spi->dev, "Erase failed\n"); | 198 | dev_err(&flash->spi->dev, "Erase failed\n"); |
200 | return err; | 199 | return err; |
201 | } | 200 | } |
@@ -205,8 +204,6 @@ static int sst25l_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
205 | 204 | ||
206 | mutex_unlock(&flash->lock); | 205 | mutex_unlock(&flash->lock); |
207 | 206 | ||
208 | instr->state = MTD_ERASE_DONE; | ||
209 | mtd_erase_callback(instr); | ||
210 | return 0; | 207 | return 0; |
211 | } | 208 | } |
212 | 209 | ||
diff --git a/drivers/mtd/devices/st_spi_fsm.c b/drivers/mtd/devices/st_spi_fsm.c index a33f5fd6818c..55d4a77f3b7f 100644 --- a/drivers/mtd/devices/st_spi_fsm.c +++ b/drivers/mtd/devices/st_spi_fsm.c | |||
@@ -1825,13 +1825,9 @@ static int stfsm_mtd_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
1825 | 1825 | ||
1826 | mutex_unlock(&fsm->lock); | 1826 | mutex_unlock(&fsm->lock); |
1827 | 1827 | ||
1828 | instr->state = MTD_ERASE_DONE; | ||
1829 | mtd_erase_callback(instr); | ||
1830 | |||
1831 | return 0; | 1828 | return 0; |
1832 | 1829 | ||
1833 | out1: | 1830 | out1: |
1834 | instr->state = MTD_ERASE_FAILED; | ||
1835 | mutex_unlock(&fsm->lock); | 1831 | mutex_unlock(&fsm->lock); |
1836 | 1832 | ||
1837 | return ret; | 1833 | return ret; |
diff --git a/drivers/mtd/lpddr/lpddr2_nvm.c b/drivers/mtd/lpddr/lpddr2_nvm.c index 2342277c9bcb..5d73db2a496d 100644 --- a/drivers/mtd/lpddr/lpddr2_nvm.c +++ b/drivers/mtd/lpddr/lpddr2_nvm.c | |||
@@ -380,14 +380,8 @@ out: | |||
380 | */ | 380 | */ |
381 | static int lpddr2_nvm_erase(struct mtd_info *mtd, struct erase_info *instr) | 381 | static int lpddr2_nvm_erase(struct mtd_info *mtd, struct erase_info *instr) |
382 | { | 382 | { |
383 | int ret = lpddr2_nvm_do_block_op(mtd, instr->addr, instr->len, | 383 | return lpddr2_nvm_do_block_op(mtd, instr->addr, instr->len, |
384 | LPDDR2_NVM_ERASE); | 384 | LPDDR2_NVM_ERASE); |
385 | if (!ret) { | ||
386 | instr->state = MTD_ERASE_DONE; | ||
387 | mtd_erase_callback(instr); | ||
388 | } | ||
389 | |||
390 | return ret; | ||
391 | } | 385 | } |
392 | 386 | ||
393 | /* | 387 | /* |
diff --git a/drivers/mtd/lpddr/lpddr_cmds.c b/drivers/mtd/lpddr/lpddr_cmds.c index 018c75faadb3..5c5ba3c7c79d 100644 --- a/drivers/mtd/lpddr/lpddr_cmds.c +++ b/drivers/mtd/lpddr/lpddr_cmds.c | |||
@@ -693,8 +693,6 @@ static int lpddr_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
693 | ofs += size; | 693 | ofs += size; |
694 | len -= size; | 694 | len -= size; |
695 | } | 695 | } |
696 | instr->state = MTD_ERASE_DONE; | ||
697 | mtd_erase_callback(instr); | ||
698 | 696 | ||
699 | return 0; | 697 | return 0; |
700 | } | 698 | } |
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c index 93c47e56d9d8..6b86d1a73cf2 100644 --- a/drivers/mtd/mtdconcat.c +++ b/drivers/mtd/mtdconcat.c | |||
@@ -446,7 +446,6 @@ static int concat_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
446 | erase->addr = 0; | 446 | erase->addr = 0; |
447 | offset += subdev->size; | 447 | offset += subdev->size; |
448 | } | 448 | } |
449 | instr->state = erase->state; | ||
450 | kfree(erase); | 449 | kfree(erase); |
451 | 450 | ||
452 | return err; | 451 | return err; |
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index f92ad02959eb..f25d65ea7149 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c | |||
@@ -961,11 +961,9 @@ int mtd_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
961 | if (!(mtd->flags & MTD_WRITEABLE)) | 961 | if (!(mtd->flags & MTD_WRITEABLE)) |
962 | return -EROFS; | 962 | return -EROFS; |
963 | 963 | ||
964 | if (!instr->len) { | 964 | if (!instr->len) |
965 | instr->state = MTD_ERASE_DONE; | ||
966 | mtd_erase_callback(instr); | ||
967 | return 0; | 965 | return 0; |
968 | } | 966 | |
969 | ledtrig_mtd_activity(); | 967 | ledtrig_mtd_activity(); |
970 | return mtd->_erase(mtd, instr); | 968 | return mtd->_erase(mtd, instr); |
971 | } | 969 | } |
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index 1c07a6f0dfe5..85fea8ea3423 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c | |||
@@ -212,11 +212,6 @@ static int part_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
212 | return ret; | 212 | return ret; |
213 | } | 213 | } |
214 | 214 | ||
215 | void mtd_erase_callback(struct erase_info *instr) | ||
216 | { | ||
217 | } | ||
218 | EXPORT_SYMBOL_GPL(mtd_erase_callback); | ||
219 | |||
220 | static int part_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) | 215 | static int part_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) |
221 | { | 216 | { |
222 | struct mtd_part *part = mtd_to_part(mtd); | 217 | struct mtd_part *part = mtd_to_part(mtd); |
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 16c8bc06975d..87b72bf626ae 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -4604,22 +4604,20 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, | |||
4604 | if (nand_check_wp(mtd)) { | 4604 | if (nand_check_wp(mtd)) { |
4605 | pr_debug("%s: device is write protected!\n", | 4605 | pr_debug("%s: device is write protected!\n", |
4606 | __func__); | 4606 | __func__); |
4607 | instr->state = MTD_ERASE_FAILED; | 4607 | ret = -EIO; |
4608 | goto erase_exit; | 4608 | goto erase_exit; |
4609 | } | 4609 | } |
4610 | 4610 | ||
4611 | /* Loop through the pages */ | 4611 | /* Loop through the pages */ |
4612 | len = instr->len; | 4612 | len = instr->len; |
4613 | 4613 | ||
4614 | instr->state = MTD_ERASING; | ||
4615 | |||
4616 | while (len) { | 4614 | while (len) { |
4617 | /* Check if we have a bad block, we do not erase bad blocks! */ | 4615 | /* Check if we have a bad block, we do not erase bad blocks! */ |
4618 | if (nand_block_checkbad(mtd, ((loff_t) page) << | 4616 | if (nand_block_checkbad(mtd, ((loff_t) page) << |
4619 | chip->page_shift, allowbbt)) { | 4617 | chip->page_shift, allowbbt)) { |
4620 | pr_warn("%s: attempt to erase a bad block at page 0x%08x\n", | 4618 | pr_warn("%s: attempt to erase a bad block at page 0x%08x\n", |
4621 | __func__, page); | 4619 | __func__, page); |
4622 | instr->state = MTD_ERASE_FAILED; | 4620 | ret = -EIO; |
4623 | goto erase_exit; | 4621 | goto erase_exit; |
4624 | } | 4622 | } |
4625 | 4623 | ||
@@ -4637,7 +4635,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, | |||
4637 | if (status) { | 4635 | if (status) { |
4638 | pr_debug("%s: failed erase, page 0x%08x\n", | 4636 | pr_debug("%s: failed erase, page 0x%08x\n", |
4639 | __func__, page); | 4637 | __func__, page); |
4640 | instr->state = MTD_ERASE_FAILED; | 4638 | ret = -EIO; |
4641 | instr->fail_addr = | 4639 | instr->fail_addr = |
4642 | ((loff_t)page << chip->page_shift); | 4640 | ((loff_t)page << chip->page_shift); |
4643 | goto erase_exit; | 4641 | goto erase_exit; |
@@ -4654,20 +4652,14 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr, | |||
4654 | chip->select_chip(mtd, chipnr); | 4652 | chip->select_chip(mtd, chipnr); |
4655 | } | 4653 | } |
4656 | } | 4654 | } |
4657 | instr->state = MTD_ERASE_DONE; | ||
4658 | 4655 | ||
4656 | ret = 0; | ||
4659 | erase_exit: | 4657 | erase_exit: |
4660 | 4658 | ||
4661 | ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO; | ||
4662 | |||
4663 | /* Deselect and wake up anyone waiting on the device */ | 4659 | /* Deselect and wake up anyone waiting on the device */ |
4664 | chip->select_chip(mtd, -1); | 4660 | chip->select_chip(mtd, -1); |
4665 | nand_release_device(mtd); | 4661 | nand_release_device(mtd); |
4666 | 4662 | ||
4667 | /* Do call back function */ | ||
4668 | if (!ret) | ||
4669 | mtd_erase_callback(instr); | ||
4670 | |||
4671 | /* Return more or less happy */ | 4663 | /* Return more or less happy */ |
4672 | return ret; | 4664 | return ret; |
4673 | } | 4665 | } |
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 979f4031f23c..8d19b78777b5 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c | |||
@@ -2143,7 +2143,6 @@ static int onenand_multiblock_erase_verify(struct mtd_info *mtd, | |||
2143 | if (ret) { | 2143 | if (ret) { |
2144 | printk(KERN_ERR "%s: Failed verify, block %d\n", | 2144 | printk(KERN_ERR "%s: Failed verify, block %d\n", |
2145 | __func__, onenand_block(this, addr)); | 2145 | __func__, onenand_block(this, addr)); |
2146 | instr->state = MTD_ERASE_FAILED; | ||
2147 | instr->fail_addr = addr; | 2146 | instr->fail_addr = addr; |
2148 | return -1; | 2147 | return -1; |
2149 | } | 2148 | } |
@@ -2172,8 +2171,6 @@ static int onenand_multiblock_erase(struct mtd_info *mtd, | |||
2172 | int ret = 0; | 2171 | int ret = 0; |
2173 | int bdry_block = 0; | 2172 | int bdry_block = 0; |
2174 | 2173 | ||
2175 | instr->state = MTD_ERASING; | ||
2176 | |||
2177 | if (ONENAND_IS_DDP(this)) { | 2174 | if (ONENAND_IS_DDP(this)) { |
2178 | loff_t bdry_addr = this->chipsize >> 1; | 2175 | loff_t bdry_addr = this->chipsize >> 1; |
2179 | if (addr < bdry_addr && (addr + len) > bdry_addr) | 2176 | if (addr < bdry_addr && (addr + len) > bdry_addr) |
@@ -2187,7 +2184,6 @@ static int onenand_multiblock_erase(struct mtd_info *mtd, | |||
2187 | printk(KERN_WARNING "%s: attempt to erase a bad block " | 2184 | printk(KERN_WARNING "%s: attempt to erase a bad block " |
2188 | "at addr 0x%012llx\n", | 2185 | "at addr 0x%012llx\n", |
2189 | __func__, (unsigned long long) addr); | 2186 | __func__, (unsigned long long) addr); |
2190 | instr->state = MTD_ERASE_FAILED; | ||
2191 | return -EIO; | 2187 | return -EIO; |
2192 | } | 2188 | } |
2193 | len -= block_size; | 2189 | len -= block_size; |
@@ -2227,7 +2223,6 @@ static int onenand_multiblock_erase(struct mtd_info *mtd, | |||
2227 | printk(KERN_ERR "%s: Failed multiblock erase, " | 2223 | printk(KERN_ERR "%s: Failed multiblock erase, " |
2228 | "block %d\n", __func__, | 2224 | "block %d\n", __func__, |
2229 | onenand_block(this, addr)); | 2225 | onenand_block(this, addr)); |
2230 | instr->state = MTD_ERASE_FAILED; | ||
2231 | instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN; | 2226 | instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN; |
2232 | return -EIO; | 2227 | return -EIO; |
2233 | } | 2228 | } |
@@ -2247,7 +2242,6 @@ static int onenand_multiblock_erase(struct mtd_info *mtd, | |||
2247 | if (ret) { | 2242 | if (ret) { |
2248 | printk(KERN_ERR "%s: Failed erase, block %d\n", | 2243 | printk(KERN_ERR "%s: Failed erase, block %d\n", |
2249 | __func__, onenand_block(this, addr)); | 2244 | __func__, onenand_block(this, addr)); |
2250 | instr->state = MTD_ERASE_FAILED; | ||
2251 | instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN; | 2245 | instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN; |
2252 | return -EIO; | 2246 | return -EIO; |
2253 | } | 2247 | } |
@@ -2259,7 +2253,6 @@ static int onenand_multiblock_erase(struct mtd_info *mtd, | |||
2259 | /* verify */ | 2253 | /* verify */ |
2260 | verify_instr.len = eb_count * block_size; | 2254 | verify_instr.len = eb_count * block_size; |
2261 | if (onenand_multiblock_erase_verify(mtd, &verify_instr)) { | 2255 | if (onenand_multiblock_erase_verify(mtd, &verify_instr)) { |
2262 | instr->state = verify_instr.state; | ||
2263 | instr->fail_addr = verify_instr.fail_addr; | 2256 | instr->fail_addr = verify_instr.fail_addr; |
2264 | return -EIO; | 2257 | return -EIO; |
2265 | } | 2258 | } |
@@ -2294,8 +2287,6 @@ static int onenand_block_by_block_erase(struct mtd_info *mtd, | |||
2294 | region_end = region->offset + region->erasesize * region->numblocks; | 2287 | region_end = region->offset + region->erasesize * region->numblocks; |
2295 | } | 2288 | } |
2296 | 2289 | ||
2297 | instr->state = MTD_ERASING; | ||
2298 | |||
2299 | /* Loop through the blocks */ | 2290 | /* Loop through the blocks */ |
2300 | while (len) { | 2291 | while (len) { |
2301 | cond_resched(); | 2292 | cond_resched(); |
@@ -2305,7 +2296,6 @@ static int onenand_block_by_block_erase(struct mtd_info *mtd, | |||
2305 | printk(KERN_WARNING "%s: attempt to erase a bad block " | 2296 | printk(KERN_WARNING "%s: attempt to erase a bad block " |
2306 | "at addr 0x%012llx\n", | 2297 | "at addr 0x%012llx\n", |
2307 | __func__, (unsigned long long) addr); | 2298 | __func__, (unsigned long long) addr); |
2308 | instr->state = MTD_ERASE_FAILED; | ||
2309 | return -EIO; | 2299 | return -EIO; |
2310 | } | 2300 | } |
2311 | 2301 | ||
@@ -2318,7 +2308,6 @@ static int onenand_block_by_block_erase(struct mtd_info *mtd, | |||
2318 | if (ret) { | 2308 | if (ret) { |
2319 | printk(KERN_ERR "%s: Failed erase, block %d\n", | 2309 | printk(KERN_ERR "%s: Failed erase, block %d\n", |
2320 | __func__, onenand_block(this, addr)); | 2310 | __func__, onenand_block(this, addr)); |
2321 | instr->state = MTD_ERASE_FAILED; | ||
2322 | instr->fail_addr = addr; | 2311 | instr->fail_addr = addr; |
2323 | return -EIO; | 2312 | return -EIO; |
2324 | } | 2313 | } |
@@ -2407,12 +2396,6 @@ static int onenand_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
2407 | /* Deselect and wake up anyone waiting on the device */ | 2396 | /* Deselect and wake up anyone waiting on the device */ |
2408 | onenand_release_device(mtd); | 2397 | onenand_release_device(mtd); |
2409 | 2398 | ||
2410 | /* Do call back function */ | ||
2411 | if (!ret) { | ||
2412 | instr->state = MTD_ERASE_DONE; | ||
2413 | mtd_erase_callback(instr); | ||
2414 | } | ||
2415 | |||
2416 | return ret; | 2399 | return ret; |
2417 | } | 2400 | } |
2418 | 2401 | ||
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index d445a4d3b770..5bfa36e95f35 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c | |||
@@ -560,9 +560,6 @@ static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
560 | erase_err: | 560 | erase_err: |
561 | spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_ERASE); | 561 | spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_ERASE); |
562 | 562 | ||
563 | instr->state = ret ? MTD_ERASE_FAILED : MTD_ERASE_DONE; | ||
564 | mtd_erase_callback(instr); | ||
565 | |||
566 | return ret; | 563 | return ret; |
567 | } | 564 | } |
568 | 565 | ||
diff --git a/drivers/mtd/ubi/gluebi.c b/drivers/mtd/ubi/gluebi.c index 1cb287ec32ad..6b655a53113b 100644 --- a/drivers/mtd/ubi/gluebi.c +++ b/drivers/mtd/ubi/gluebi.c | |||
@@ -272,12 +272,9 @@ static int gluebi_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
272 | if (err) | 272 | if (err) |
273 | goto out_err; | 273 | goto out_err; |
274 | 274 | ||
275 | instr->state = MTD_ERASE_DONE; | ||
276 | mtd_erase_callback(instr); | ||
277 | return 0; | 275 | return 0; |
278 | 276 | ||
279 | out_err: | 277 | out_err: |
280 | instr->state = MTD_ERASE_FAILED; | ||
281 | instr->fail_addr = (long long)lnum * mtd->erasesize; | 278 | instr->fail_addr = (long long)lnum * mtd->erasesize; |
282 | return err; | 279 | return err; |
283 | } | 280 | } |
diff --git a/drivers/net/ethernet/sfc/falcon/mtd.c b/drivers/net/ethernet/sfc/falcon/mtd.c index cde593cb1052..2d67e4621a3d 100644 --- a/drivers/net/ethernet/sfc/falcon/mtd.c +++ b/drivers/net/ethernet/sfc/falcon/mtd.c | |||
@@ -24,17 +24,8 @@ | |||
24 | static int ef4_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) | 24 | static int ef4_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) |
25 | { | 25 | { |
26 | struct ef4_nic *efx = mtd->priv; | 26 | struct ef4_nic *efx = mtd->priv; |
27 | int rc; | ||
28 | 27 | ||
29 | rc = efx->type->mtd_erase(mtd, erase->addr, erase->len); | 28 | return efx->type->mtd_erase(mtd, erase->addr, erase->len); |
30 | if (rc == 0) { | ||
31 | erase->state = MTD_ERASE_DONE; | ||
32 | } else { | ||
33 | erase->state = MTD_ERASE_FAILED; | ||
34 | erase->fail_addr = MTD_FAIL_ADDR_UNKNOWN; | ||
35 | } | ||
36 | mtd_erase_callback(erase); | ||
37 | return rc; | ||
38 | } | 29 | } |
39 | 30 | ||
40 | static void ef4_mtd_sync(struct mtd_info *mtd) | 31 | static void ef4_mtd_sync(struct mtd_info *mtd) |
diff --git a/drivers/net/ethernet/sfc/mtd.c b/drivers/net/ethernet/sfc/mtd.c index a77a8bd2dd70..4ac30b6e5dab 100644 --- a/drivers/net/ethernet/sfc/mtd.c +++ b/drivers/net/ethernet/sfc/mtd.c | |||
@@ -24,17 +24,8 @@ | |||
24 | static int efx_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) | 24 | static int efx_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) |
25 | { | 25 | { |
26 | struct efx_nic *efx = mtd->priv; | 26 | struct efx_nic *efx = mtd->priv; |
27 | int rc; | ||
28 | 27 | ||
29 | rc = efx->type->mtd_erase(mtd, erase->addr, erase->len); | 28 | return efx->type->mtd_erase(mtd, erase->addr, erase->len); |
30 | if (rc == 0) { | ||
31 | erase->state = MTD_ERASE_DONE; | ||
32 | } else { | ||
33 | erase->state = MTD_ERASE_FAILED; | ||
34 | erase->fail_addr = MTD_FAIL_ADDR_UNKNOWN; | ||
35 | } | ||
36 | mtd_erase_callback(erase); | ||
37 | return rc; | ||
38 | } | 29 | } |
39 | 30 | ||
40 | static void efx_mtd_sync(struct mtd_info *mtd) | 31 | static void efx_mtd_sync(struct mtd_info *mtd) |
diff --git a/drivers/staging/goldfish/goldfish_nand.c b/drivers/staging/goldfish/goldfish_nand.c index 52cc1363993e..f5e002ecba75 100644 --- a/drivers/staging/goldfish/goldfish_nand.c +++ b/drivers/staging/goldfish/goldfish_nand.c | |||
@@ -119,9 +119,6 @@ static int goldfish_nand_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
119 | return -EIO; | 119 | return -EIO; |
120 | } | 120 | } |
121 | 121 | ||
122 | instr->state = MTD_ERASE_DONE; | ||
123 | mtd_erase_callback(instr); | ||
124 | |||
125 | return 0; | 122 | return 0; |
126 | 123 | ||
127 | invalid_arg: | 124 | invalid_arg: |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 4cbb7f555244..a86c4fa93115 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -30,12 +30,6 @@ | |||
30 | 30 | ||
31 | #include <asm/div64.h> | 31 | #include <asm/div64.h> |
32 | 32 | ||
33 | #define MTD_ERASE_PENDING 0x01 | ||
34 | #define MTD_ERASING 0x02 | ||
35 | #define MTD_ERASE_SUSPEND 0x04 | ||
36 | #define MTD_ERASE_DONE 0x08 | ||
37 | #define MTD_ERASE_FAILED 0x10 | ||
38 | |||
39 | #define MTD_FAIL_ADDR_UNKNOWN -1LL | 33 | #define MTD_FAIL_ADDR_UNKNOWN -1LL |
40 | 34 | ||
41 | struct mtd_info; | 35 | struct mtd_info; |
@@ -49,7 +43,6 @@ struct erase_info { | |||
49 | uint64_t addr; | 43 | uint64_t addr; |
50 | uint64_t len; | 44 | uint64_t len; |
51 | uint64_t fail_addr; | 45 | uint64_t fail_addr; |
52 | u_char state; | ||
53 | }; | 46 | }; |
54 | 47 | ||
55 | struct mtd_erase_region_info { | 48 | struct mtd_erase_region_info { |
@@ -589,8 +582,6 @@ extern void register_mtd_user (struct mtd_notifier *new); | |||
589 | extern int unregister_mtd_user (struct mtd_notifier *old); | 582 | extern int unregister_mtd_user (struct mtd_notifier *old); |
590 | void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size); | 583 | void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size); |
591 | 584 | ||
592 | void mtd_erase_callback(struct erase_info *instr); | ||
593 | |||
594 | static inline int mtd_is_bitflip(int err) { | 585 | static inline int mtd_is_bitflip(int err) { |
595 | return err == -EUCLEAN; | 586 | return err == -EUCLEAN; |
596 | } | 587 | } |