
On 7 March 2012 14:42, Alex Zeffertt azeffertt@cambridgesys.com wrote:
Hi u-booters,
I have a short script in my u-boot environment which chooses which of two ubifs partitions to boot by attempting to read a release file in each one.
Unfortunately, after an unclean shutdown sometimes the ubifsmount fails. (By "unclean shutdown" I mean that the board was power cycled while doing some low bandwidth logging.)
The strange thing is that Linux has no problem mounting the partition as its root filesystem. This is very confusing because it looks like the ubifs implementation in u-boot is just a copy of the one in Linux.
Has anyone else seen this problem?
Regards,
Alex
PS My kernel is linux-3.0.0/armv5tel and the full u-boot trace is below:
U-Boot 2011.06 (Feb 10 2012 - 12:29:06) OpenRD-Base SoC: Kirkwood 88F6281_A1 DRAM: 128 MiB NAND: 512 MiB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: egiga0 88E6351 Initialized on egiga0 Hit any key to stop autoboot: 0 Creating 1 MTD partitions on "nand0": 0x000001000000-0x000010000000 : "mtd=2" UBI: attaching mtd1 to ubi0 UBI: physical eraseblock size: 131072 bytes (128 KiB) UBI: logical eraseblock size: 126976 bytes UBI: smallest flash I/O unit: 2048 UBI: sub-page size: 512 UBI: VID header offset: 2048 (aligned 2048) UBI: data offset: 4096 UBI: attached mtd1 to ubi0 UBI: MTD device name: "mtd=2" UBI: MTD device size: 240 MiB UBI: number of good PEBs: 1913 UBI: number of bad PEBs: 7 UBI: max. allowed volumes: 128 UBI: wear-leveling threshold: 4096 UBI: number of internal volumes: 1 UBI: number of user volumes: 1 UBI: available PEBs: 0 UBI: total number of reserved PEBs: 1913 UBI: number of PEBs reserved for bad PEB handling: 19 UBI: max/mean erase counter: 7/1 UBIFS: recovery needed Error reading superblock on volume 'ubi:rootfs'! UBI: mtd1 is detached from ubi0
I've been comparing the linux and u-boot implementations, and it looks like the following fix is in the kernel but not in u-boot. I don't really understand it, but it looks like a candidate. Might porting this change to u-boot fix the issue?
- Alex
commit 2ef13294d29bcfb306e0d360f1b97f37b647b0c0 Author: Artem Bityutskiy Artem.Bityutskiy@nokia.com Date: Sun Sep 19 18:34:26 2010 +0300
UBIFS: introduce new flags for RO mounts
Commit 2fde99cb55fb9d9b88180512a5e8a5d939d27fec "UBIFS: mark VFS SB RO too" introduced regression. This commit made UBIFS set the 'MS_RDONLY' flag in the VFS superblock when it switches to R/O mode due to an error. This was done to make VFS show the R/O UBIFS flag in /proc/mounts.
However, several places in UBIFS relied on the 'MS_RDONLY' flag and assume this flag can only change when we re-mount. For example, 'ubifs_put_super()'.
This patch introduces new UBIFS flag - 'c->ro_mount' which changes only when we re-mount, and preserves the way UBIFS was originally mounted (R/W or R/O). This allows us to de-initialize UBIFS cleanly in 'ubifs_put_super()'.
This patch also changes all 'ubifs_assert(!c->ro_media)' assertions to 'ubifs_assert(!c->ro_media && !c->ro_mount)', because we never should write anything if the FS was mounter R/O.
All the places where we test for 'MS_RDONLY' flag in the VFS SB were changed and now we test the 'c->ro_mount' flag instead, because it preserves the original UBIFS mount type, unlike the 'MS_RDONLY' flag.
Signed-off-by: Artem Bityutskiy Artem.Bityutskiy@nokia.com