From: Boris Brezillon <boris.brezil...@bootlin.com>

None of the mtd->_erase() implementations work in an asynchronous manner,
so let's simplify MTD users that call mtd_erase(). All they need to do
is check the value returned by mtd_erase() and assume that != 0 means
failure.

Signed-off-by: Boris Brezillon <boris.brezil...@bootlin.com>
Reviewed-by: Richard Weinberger <rich...@nod.at>

5       31      cpukit/libfs/src/jffs2/src/erase.c

diff --git a/cpukit/libfs/src/jffs2/src/erase.c 
b/cpukit/libfs/src/jffs2/src/erase.c
index 323848cc75..973d3ab87e 100644
--- a/cpukit/libfs/src/jffs2/src/erase.c
+++ b/cpukit/libfs/src/jffs2/src/erase.c
@@ -23,14 +23,6 @@
 #include <linux/pagemap.h>
 #include "nodelist.h"
 
-struct erase_priv_struct {
-       struct jffs2_eraseblock *jeb;
-       struct jffs2_sb_info *c;
-};
-
-#ifndef __ECOS
-static void jffs2_erase_callback(struct erase_info *);
-#endif
 static void jffs2_erase_failed(struct jffs2_sb_info *c, struct 
jffs2_eraseblock *jeb, uint32_t bad_offset);
 static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct 
jffs2_eraseblock *jeb);
 static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct 
jffs2_eraseblock *jeb);
@@ -53,7 +45,7 @@ static void jffs2_erase_block(struct jffs2_sb_info *c,
        jffs2_dbg(1, "%s(): erase block %#08x (range %#08x-%#08x)\n",
                  __func__,
                  jeb->offset, jeb->offset, jeb->offset + c->sector_size);
-       instr = kmalloc(sizeof(struct erase_info) + sizeof(struct 
erase_priv_struct), GFP_KERNEL);
+       instr = kmalloc(sizeof(struct erase_info), GFP_KERNEL);
        if (!instr) {
                pr_warn("kmalloc for struct erase_info in jffs2_erase_block 
failed. Refiling block for later\n");
                mutex_lock(&c->erase_free_sem);
@@ -72,15 +64,13 @@ static void jffs2_erase_block(struct jffs2_sb_info *c,
        instr->mtd = c->mtd;
        instr->addr = jeb->offset;
        instr->len = c->sector_size;
-       instr->callback = jffs2_erase_callback;
-       instr->priv = (unsigned long)(&instr[1]);
-
-       ((struct erase_priv_struct *)instr->priv)->jeb = jeb;
-       ((struct erase_priv_struct *)instr->priv)->c = c;
 
        ret = mtd_erase(c->mtd, instr);
-       if (!ret)
+       if (!ret) {
+               jffs2_erase_succeeded(c, jeb);
+               kfree(instr);
                return;
+       }
 
        bad_offset = instr->fail_addr;
        kfree(instr);
@@ -216,22 +206,6 @@ static void jffs2_erase_failed(struct jffs2_sb_info *c, 
struct jffs2_eraseblock
        wake_up(&c->erase_wait);
 }
 
-#ifndef __ECOS
-static void jffs2_erase_callback(struct erase_info *instr)
-{
-       struct erase_priv_struct *priv = (void *)instr->priv;
-
-       if(instr->state != MTD_ERASE_DONE) {
-               pr_warn("Erase at 0x%08llx finished, but state != 
MTD_ERASE_DONE. State is 0x%x instead.\n",
-                       (unsigned long long)instr->addr, instr->state);
-               jffs2_erase_failed(priv->c, priv->jeb, instr->fail_addr);
-       } else {
-               jffs2_erase_succeeded(priv->c, priv->jeb);
-       }
-       kfree(instr);
-}
-#endif /* !__ECOS */
-
 /* Hmmm. Maybe we should accept the extra space it takes and make
    this a standard doubly-linked list? */
 static inline void jffs2_remove_node_refs_from_ino_list(struct jffs2_sb_info 
*c,
-- 
2.13.7

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to