summaryrefslogtreecommitdiffstats
path: root/fs/jffs2
diff options
context:
space:
mode:
authorJoakim Tjernlund <Joakim.Tjernlund@transmode.se>2009-05-28 17:43:59 +0200
committerDavid Woodhouse <David.Woodhouse@intel.com>2009-05-29 10:44:46 +0100
commit81e2962801bbb4e740c501ca687d5cb857929c04 (patch)
tree59b7eabd1477825c48278956a9a9a387ee92d12b /fs/jffs2
parent8541c1180a355c4da283fc6b03a92c0233823c1b (diff)
downloadlinux-81e2962801bbb4e740c501ca687d5cb857929c04.tar.gz
linux-81e2962801bbb4e740c501ca687d5cb857929c04.tar.bz2
linux-81e2962801bbb4e740c501ca687d5cb857929c04.zip
jffs2: Fix corruption when flash erase/write failure
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@transmode.se> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'fs/jffs2')
-rw-r--r--fs/jffs2/erase.c7
1 files changed, 0 insertions, 7 deletions
diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c
index c32b4a1ad6cf..a0244740b75a 100644
--- a/fs/jffs2/erase.c
+++ b/fs/jffs2/erase.c
@@ -480,13 +480,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;