[PATCH] [JFFS2] Fix corruption when flash erase/write failure
Joakim Tjernlund
joakim.tjernlund at transmode.se
Fri May 29 05:37:18 EDT 2009
I think this is 2.6.30 material, please comment soon(or send upstream)
Jocke
Joakim Tjernlund <Joakim.Tjernlund at transmode.se> wrote on 28/05/2009 17:43:59:
>
> 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