[U-Boot] UBIFS Problems with U-boot 2018.1 & 4.14 Linux

Heiko Schocher hs at denx.de
Fri May 18 08:44:43 UTC 2018


Hello Otto,

Am 17.05.2018 um 23:12 schrieb Otto Blom:
> Hi There !
> 
> I'm seeing a strange problem with u-boot 2018.1 and Linux 4.14 (Xilinx
> Petalinux 2018.1).
> If I write a ubifs image to flash using Linux 4.9 I can mount and read
> files from the image
> in both u-boot 2018.1 and Linux 4.14. However as soon as I write a new
> file to the file-system
> from Linux, U-boot can no longer read the file. The filesystem still
> mounts, but when
> I attempt to read the file I get the following error
> 
> UBIFS error (ubi0:0 pid 0): read_block: bad data node (block 661, inode 5763)
>          magic          0x6101831
>          crc            0x8e6aff1a
>          node_type      1 (data node)
>          group_type     0 (no node group)
>          sqnum          63819
>          len            3075
>          key            (5763, data, 661)
>          size           4096
>          compr_typ      1
>          data size      3027
>          data:
> UBIFS error (ubi0:0 pid 0): do_readpage: cannot read page 661 of inode
> 5763, error -22

err = -EINVAL ...

> The file can still be read correctly from Linux, leading me to believe
> there is some form
> of incompatibility going on. I noticed that the ubifs version number
> was bumped from 4 to 5
> in this commit

Hmm... looking into fs/ubifs/ubifs.c read_block() it seems code breaks
here (line 702 ff):

         len = le32_to_cpu(dn->size);
         if (len <= 0 || len > UBIFS_BLOCK_SIZE)
                 goto dump;

         dlen = le32_to_cpu(dn->ch.len) - UBIFS_DATA_NODE_SZ;
         out_len = UBIFS_BLOCK_SIZE;
         err = ubifs_decompress(c, &dn->data, dlen, addr, &out_len,
                                le16_to_cpu(dn->compr_type));
         if (err || len != out_len)
                 goto dump;

len is 3075 ... so it would be nice to see a printf after ubifs_decompress()
call, and print the values from out_len, err, len ...

It seems to me only ubifs_decompress() can fail here ... looking into
ubifs_decompress()... Hmm... as we see no ubifs_err output from ubifs_decompress()
only the case "len != out_len" can happen in your case ...

You use UBIFS_COMPR_LZO ... may a problem there?

No real idea why ...

> http://git.infradead.org/linux-ubifs.git/commit/fc4b891bbefa73b496bb44b076bb5274b6bfba68
> 
> Both Linux 4.9 and U-boot 18.1 still have version 4. Could that have
> something do to with it ?

I think not, but may I miss here something...

@Richard: any idea?

> I'm running on a ZynqMP platform with Micron Flash (On-Die ECC)

bye,
Heiko
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: hs at denx.de


More information about the U-Boot mailing list