Re: JFFS2 errors on ppc-4xx with CFI NOR flash

Ryan Thompson
2010-03-04T22:02:01Z

> On Thu, Mar 4, 2010 at 1:03 PM, massimo cirillo <maxcir@gmail.com> wrote:
>> As first attempt try to disable erase suspend feature in the flash
>> driver.

I have tried this against my 2.6.31 tree by uncommenting the following
in drivers/mtd/chips/cfi_cmdset_0001.c:40:

#define CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE

Now my test output looks like the following. Note that it ran
successfully from 3% - 53%, which is right in the range where problems
tend to appear.

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mtd/modules 32128 1032 31096 3% /mnt
[... snip 3 - 52%, no errors ...]
/dev/mtd/modules 32128 16668 15460 52% /mnt
/dev/mtd/modules 32128 16912 15216 53% /mnt
Jan 1 00:17:27 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0022a030
/dev/mtd/modules 32128 17308 14820 54% /mnt
/dev/mtd/modules 32128 17572 14556 55% /mnt
/dev/mtd/modules 32128 17836 14292 56% /mnt
/dev/mtd/modules 32128 18100 14028 56% /mnt
/dev/mtd/modules 32128 18368 13760 57% /mnt
/dev/mtd/modules 32128 18604 13524 58% /mnt
Jan 1 00:18:40 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x01b2a010
/dev/mtd/modules 32128 18992 13136 59% /mnt
/dev/mtd/modules 32128 19260 12868 60% /mnt
/dev/mtd/modules 32128 19524 12604 61% /mnt
/dev/mtd/modules 32128 19788 12340 62% /mnt
/dev/mtd/modules 32128 20052 12076 62% /mnt
/dev/mtd/modules 32128 20316 11812 63% /mnt
/dev/mtd/modules 32128 20552 11576 64% /mnt
Jan 1 00:20:04 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x013ca034
/dev/mtd/modules 32128 20944 11184 65% /mnt
/dev/mtd/modules 32128 21208 10920 66% /mnt
/dev/mtd/modules 32128 21476 10652 67% /mnt
/dev/mtd/modules 32128 21740 10388 68% /mnt
/dev/mtd/modules 32128 22004 10124 68% /mnt
/dev/mtd/modules 32128 22244 9884 69% /mnt
/dev/mtd/modules 32128 22504 9624 70% /mnt
/dev/mtd/modules 32128 22764 9364 71% /mnt
/dev/mtd/modules 32128 23032 9096 72% /mnt
/dev/mtd/modules 32128 23296 8832 73% /mnt
/dev/mtd/modules 32128 23564 8564 73% /mnt
/dev/mtd/modules 32128 23828 8300 74% /mnt
/dev/mtd/modules 32128 24092 8036 75% /mnt
/dev/mtd/modules 32128 24328 7800 76% /mnt
Jan 1 00:22:48 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0052a004
/dev/mtd/modules 32128 24716 7412 77% /mnt
Jan 1 00:23:02 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x003ea034
/dev/mtd/modules 32128 25116 7012 78% /mnt
Jan 1 00:23:42 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0006a028
/dev/mtd/modules 32128 25492 6636 79% /mnt
Jan 1 00:24:03 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x01dc9fb8
Jan 1 00:24:12 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:24:12 rjt kernel: Erase at 0x01da0000 failed immediately: errno -62
Jan 1 00:24:27 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x01c6a004
Jan 1 00:24:36 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:24:36 rjt kernel: Erase at 0x01c40000 failed immediately: errno -62
/dev/mtd/modules 32128 26268 5860 82% /mnt
/dev/mtd/modules 32128 26528 5600 83% /mnt
Jan 1 00:25:33 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x017aa034
Jan 1 00:25:41 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:25:41 rjt kernel: Erase at 0x01780000 failed immediately: errno -62
Jan 1 00:25:45 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0176a024
Jan 1 00:25:54 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:25:54 rjt kernel: Erase at 0x01740000 failed immediately: errno -62
Jan 1 00:26:14 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0154a048
Jan 1 00:26:23 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:26:23 rjt kernel: Erase at 0x01520000 failed immediately: errno -62
Jan 1 00:26:44 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0150a024
Jan 1 00:26:53 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:26:53 rjt kernel: Erase at 0x014e0000 failed immediately: errno -62
Jan 1 00:27:18 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0140738c
Jan 1 00:27:27 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:27:27 rjt kernel: Erase at 0x013e0000 failed immediately: errno -62
/dev/mtd/modules 32128 28076 4052 87% /mnt
Jan 1 00:28:10 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x00f6a048
Jan 1 00:28:18 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:28:18 rjt kernel: Erase at 0x00f40000 failed immediately: errno -62
/dev/mtd/modules 32128 28584 3544 89% /mnt
Jan 1 00:28:42 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x00d2a040
Jan 1 00:28:51 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:28:51 rjt kernel: Erase at 0x00d00000 failed immediately: errno -62
Jan 1 00:29:04 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x00cca02c
Jan 1 00:29:12 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:29:12 rjt kernel: Erase at 0x00ce0000 failed immediately: errno -62
Jan 1 00:29:42 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x00aca038
Jan 1 00:29:51 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:29:51 rjt kernel: Erase at 0x00aa0000 failed immediately: errno -62
Jan 1 00:30:02 rjt kernel: Newly-erased block contained word 0x0 at
offset 0x0096a010
Jan 1 00:30:11 rjt kernel: f0000000.flash: block erase error: (status timeout)
Jan 1 00:30:11 rjt kernel: Erase at 0x00940000 failed immediately: errno -62
/dev/mtd/modules 32128 29872 2256 93% /mnt

The errors continued until the filesystem actually reported 100% full
and my script terminated. The entire 3%-100% operation took about 21
minutes for <32MiB, and was definitely much slower towards the end
with all the errors.

- R