[Patch 1/1] don't suspend erase for erase in cfi_cmdset_0002

Joakim Tjernlund joakim.tjernlund at transmode.se
Mon Aug 3 07:59:16 EDT 2009


linux-mtd-bounces at lists.infradead.org wrote on 03/08/2009 12:50:44:

>
>
> Hi,
>
> came around this problem while stress testing jffs2. From time to time the
> block erase failed and the file system overflows. I don't know if there
> are any Nor chips out there which allow a new erase to start when in erase
> suspend. However, the chips on my board dont't. And even when it doesn't
> make much sense to suspend an erase operation for another erase.
>
> Patch below fixes the problem for me.
>
> Have fun and take care,
>
> Peter
>
> Signed-off-by: Peter Wippich <pewi at gw-instruments.de>
> ---
> diff -Naur a/drivers/mtd/chips/cfi_cmdset_0002.c
> b/drivers/mtd/chips/cfi_cmdset_0002.c
> --- a/drivers/mtd/chips/cfi_cmdset_0002.c   2007-07-10 20:56:30.000000000 +0200
> +++ b/drivers/mtd/chips/cfi_cmdset_0002.c   2009-08-02 19:55:34.000000000 +0200
> @@ -521,6 +521,10 @@
>     case FL_ERASING:
>        if (mode == FL_WRITING) /* FIXME: Erase-suspend-program appears broken. */
>           goto sleep;
> +      if (mode == FL_ERASING) {
> +         printk(KERN_INFO "attempt erase suspend with mode FL_ERASING\n") ;
> +         goto sleep;
> +      }
>
>        if (!(   mode == FL_READY
>              || mode == FL_POINT
>

This change looks bogus. You are not supposed to need the extra test.
I do think this test is faulty though:

	if (!(   mode == FL_READY
		      || mode == FL_POINT
		      || !cfip
		      || (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))
		      || (mode == FL_WRITING && (cfip->EraseSuspend & 0x1)
		    )))

What happens if cfip is NULL?

 Jocke




More information about the linux-mtd mailing list