[U-Boot] UBI Fastmap seems to be broken

Heiko Schocher hs at denx.de
Wed Mar 23 06:48:45 CET 2016


Hello Tony,

please add me to Cc, I am little bit under water, and it was just
luck, that I found this EMail ;-)

Am 22.03.2016 um 13:39 schrieb Benzig, Tony:
> Hello together,
>
> I've been working on an AM335x based board with a NAND Flash attached on the GPMI Interface.
> I've been using U-boot v2015.01 with the latest ubi patches. Please don't ask why I'm not using the latest U-Boot Version, it's due to some company conventions.

That was my first thought ;-)

> So my ubi and ubifs drivers are the same as the drivers on the current U-Boot master.

You should also look, that mtd and your nand driver is the same as in
mainline.

> I also added this patch from Heiko Schocher [U-Boot] [PATCH] mtd,  ubi: set free_count to zero before walking through erase list: (http://lists.denx.de/pipermail/u-boot/2016-February/244472.html)
> Without using this patch, ubi is trying to write on pages which are not empty and this will directly lead to unrecoverable ecc errors.

Yes, but I think, this patch needs more investigation why this happens ..

> Nevertheless, ubi is working so far but once I attach my ubi the second time (this will normally happen via fastmap), I can't mount my UBIFS anymore.
> Please see the log below.

Hmm.. I have such tests running for current mainline, they show no
errors ...

> It looks like there is something wrong with the fastmap anchors, because if I disable "CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT" and let Linux do the conversion, everything is fine until
> U-Boot is updating the anchors.

What Linux version do you use. I did the UBI/UBIFS sync with Linux 4.2,
as UBI Fastmap is broken/buggy in Linux version before!

> So, could you help me to analyse this strange behaviour or is it already known?

I am not aware of it ...

> U-Boot# nand erase.part System
> device 0 offset 0xa00000, size 0x1f600000
> Erasing at 0x1ffe0000 -- 100% complete.
> OK
>
> U-Boot# usb start
> (Re)start USB...
> USB0:   scanning bus 0 for devices... 1 USB Device(s) found
>         scanning usb for storage devices... 1 Storage Device(s) found
>
> U-Boot# fatload usb 0:1 0x82000000 update/rootfs.ubi
> 2097152 bytes read in 1300 ms (1.5 MiB/s)
>
> U-Boot# nand write 0x82000000 0xA00000 0x200000
> NAND write: device 0 offset 0xa00000, size 0x200000
> 2097152 bytes written: OK
>
> U-Boot# ubi part System
> ubi0: default fastmap pool size: 200
> ubi0: default fastmap WL pool size: 100
> ubi0: attaching mtd1
> ubi0: scanning is finished
> ubi0: attached mtd1 (name "mtd=2", size 502 MiB)
> ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
> ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
> ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
> ubi0: good PEBs: 4016, bad PEBs: 0, corrupted PEBs: 0
> ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
> ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 2042447318
> ubi0: available PEBs: 3896, total reserved PEBs: 120, PEBs reserved for bad PEB handling: 80
>
> U-Boot# ubifsmount ubi:hwi
> UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "hwi", R/O mode
> UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
> UBIFS (ubi0:0): FS size: 3047424 bytes (2 MiB, 24 LEBs), journal size 1142785 bytes (1 MiB, 8 LEBs)
> UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB)
> UBIFS (ubi0:0): media format: w4/r0 (latest is w4/r0), UUID 8db76d20, small LPT model
>
> U-Boot# ubi part System
> Unmounting UBIFS volume hwi!
> ubi0 error: ubi_detach_mtd_dev: ubi0 reference count 1, destroy anyway
> ubi0: detaching mtd1
> ubi0: mtd1 is detached
> ubi0: default fastmap pool size: 200
> ubi0: default fastmap WL pool size: 100
> ubi0: attaching mtd1
> ubi0: attached by fastmap

Here a fastmap is found ... looks good.

> ubi0: fastmap pool size: 200
> ubi0: fastmap WL pool size: 100
> ubi0: attached mtd1 (name "mtd=2", size 502 MiB)
> ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
> ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
> ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
> ubi0: good PEBs: 4016, bad PEBs: 0, corrupted PEBs: 0
> ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
> ubi0: max/mean erase counter: 2/0, WL threshold: 4096, image sequence number: 2042447318
> ubi0: available PEBs: 3896, total reserved PEBs: 120, PEBs reserved for bad PEB handling: 80

Looks good ...

> U-Boot# ubifsmount ubi:hwi
> UBIFS error (ubi0:0 pid 0): mount_ubifs: can't format empty UBI volume: read-only mount
> Error reading superblock on volume 'ubi:hwi' errno=-30!
> ubifsmount - mount UBIFS volume
>
> Usage:
> ubifsmount <volume-name>
>      - mount 'volume-name' volume

No real idea, whats happen here ... you have to debug into it,
sorry.

bye,
Heiko
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the U-Boot mailing list