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

Joakim Tjernlund joakim.tjernlund at transmode.se
Mon Aug 3 08:13:45 EDT 2009



>
> >
> >
> > 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?

eeh, and what if erase suspend isn't supported at all?
Take a hint from cfi_cmdset_0001.c

>
>  Jocke





More information about the linux-mtd mailing list