Flash corruption when using UBIFS filesystem on m25p80

Henric Eriksson Henric.Eriksson at brv.se
Mon Jun 23 07:09:45 PDT 2014


Hello,

We have a board with a Freescale i.MX28 running Linux kernel 3.14.3 
(Freescale mainline fork). This board has a Spansion S25FL512S Flash 
memory connected with support for Quad SPI communication. We've been 
working for a while now trying to use this as the main rootfs storage 
but have run into problems of Flash corruption when using UBIFS.

We're using the m25p80 driver for this as it has support for this Flash 
memory and supply the partition table using the command line which is 
correctly picked up:

m25p80 spi1.0: s25fl512s (65536 Kbytes)
5 cmdlinepart partitions found on MTD device spi1.0
Creating 5 MTD partitions on "spi1.0":
0x000000000000-0x000000080000 : "bootloader"
0x000000080000-0x0000000c0000 : "environment"
0x0000000c0000-0x0000004c0000 : "kernel"
0x0000004c0000-0x000000500000 : "fdt"
0x000000500000-0x000004000000 : "filesystem"

The "fileystem" partitions then shows up at /dev/mtd4. We format the MTD 
partition using ubiformat and then attach it with ubiattach:

$ ubiformat /dev/mtd4
ubiformat: mtd4 (nor), size 61865984 bytes (59.0 MiB), 236 eraseblocks 
of 262144 bytes (256.0 KiB), min. I/O size 1 bytes
libscan: scanning eraseblock 235 -- 100 % complete
ubiformat: use erase counter 0 for all eraseblocks
ubiformat: formatting eraseblock 235 -- 100 % complete

$ ubiattach -m 4
UBI: attaching mtd4 to ubi0
UBI: scanning is finished
UBI: attached mtd4 (name "filesystem", size 59 MiB) to ubi0
UBI: PEB size: 262144 bytes (256 KiB), LEB size: 262016 bytes
UBI: min./max. I/O unit sizes: 1/256, sub-page size 1
UBI: VID header offset: 64 (aligned 64), data offset: 128
UBI: good PEBs: 236, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 0, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 0/0, WL threshold: 4096, image sequence 
number: 1780967944
UBI: available PEBs: 232, total reserved PEBs: 4, PEBs reserved for bad 
PEB handling: 0
UBI: background thread "ubi_bgt0d" started, PID 464
UBI device number 0, total 236 LEBs (61835776 bytes, 59.0 MiB), 
available 232 LEBs (60787712 bytes, 58.0 MiB), LEB size 262016 bytes 
(255.9 KiB)

Everything looks fine so far. Making a volume and then the UBIFS 
filesystem also works fine:

$ ubimkvol /dev/ubi0 -m -N "filesystem"
Set volume size to 60787712
Volume ID 0, size 232 LEBs (60787712 bytes, 58.0 MiB), LEB size 262016 
bytes (255.9 KiB), dynamic, name "filesystem", alignment 1

$ mkfs.ubifs -m 1 -e 262016 -c 232 /dev/ubi0_0

The first mount always succeeds and you can then read and write to the 
partition:

$ mount -t ubifs /dev/ubi0_0 tmp/
UBIFS: background thread "ubifs_bgt0_0" started, PID 473
UBIFS: mounted UBI device 0, volume 0, name "filesystem"
UBIFS: LEB size: 262016 bytes (255 KiB), min./max. I/O unit sizes: 8 
bytes/256 bytes
UBIFS: FS size: 58167552 bytes (55 MiB, 222 LEBs), journal size 8384512 
bytes (7 MiB, 32 LEBs)
UBIFS: reserved for root: 0 bytes (0 KiB)
UBIFS: media format: w4/r0 (latest is w4/r0), UUID 
AC912B03-BC0F-4641-9B0B-337F71D1D2AF, small LPT model

The problems arise after the second mount. The error is similar every time:

$ umount tmp/
UBIFS: un-mount UBI device 0, volume 0
UBIFS: background thread "ubifs_bgt0_0" stops

$ mount -t ubifs /dev/ubi0_0 tmp/
UBIFS: background thread "ubifs_bgt0_0" started, PID 480
UBIFS error (pid 479): ubifs_scan: garbage
UBIFS error (pid 479): ubifs_scanned_corruption: corruption at LEB 4:0
UBIFS error (pid 479): ubifs_scanned_corruption: first 8192 bytes from 
LEB 4:0
UBIFS error (pid 479): ubifs_scan: LEB 4 scanning failed
UBIFS: background thread "ubifs_bgt0_0" stops
mount: mounting /dev/ubi0_0 on tmp/ failed: Structure needs cleaning

Subsequent mounts cause it to attempt recovery but it always inevitably 
fails with similar errors.

We've tried to do run the MTD tests on the Flash device and the 
mtd_readtest works without any problems while the mtd_stresstest causes 
other underlying frameworks to fail, in this particular case the DMA is 
overrun. Those particular errors don't appear in the normal use-case 
though so that's probably not part of the problem.

Any assistance in the matter would be greatly appreciated!

Regards,

Henric Eriksson


More information about the linux-mtd mailing list