[PATCH] [JFFS2] Fix corruption when flash erase/write failure

Joakim Tjernlund Joakim.Tjernlund at transmode.se
Thu May 28 11:43:59 EDT 2009


Erase errors such as:
"Newly-erased block contained word 0xa4ef223e at offset 0x0296a014"
and failure to write the clean marker,
moves the offending erase block to erasing list before calling
jffs2_erase_failed(). This is bad as jffs2_erase_failed() will
also move the block to the bad_list, but is now moving the
wrong block, causing FS corruption.

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund at transmode.se>
---
 fs/jffs2/erase.c |    7 -------
 1 files changed, 0 insertions(+), 7 deletions(-)

diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c
index 51024ac..b082655 100644
--- a/fs/jffs2/erase.c
+++ b/fs/jffs2/erase.c
@@ -488,13 +488,6 @@ static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseb
 	return;
 
 filebad:
-	mutex_lock(&c->erase_free_sem);
-	spin_lock(&c->erase_completion_lock);
-	/* Stick it on a list (any list) so erase_failed can take it
-	   right off again.  Silly, but shouldn't happen often. */
-	list_move(&jeb->list, &c->erasing_list);
-	spin_unlock(&c->erase_completion_lock);
-	mutex_unlock(&c->erase_free_sem);
 	jffs2_erase_failed(c, jeb, bad_offset);
 	return;
 
-- 
1.6.2.3




More information about the linux-mtd mailing list