[U-Boot] ubifsmount reports "Error reading superblock", but linux can mount FS

Alex Zeffertt azeffertt at cambridgesys.com
Wed Mar 7 16:14:28 CET 2012

On 7 March 2012 14:42, Alex Zeffertt <azeffertt at 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 at 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 at nokia.com>

More information about the U-Boot mailing list