On Sun, 21 Jul 2013 10:53:25 +0200 Andreas Bießmann [email protected] wrote,
Hi Andreas, > From: Rommel Custodio <[email protected]> > > Fix reading ext4_extent_header struture on BE machines. > Some 16 bit fields where converted to 32 bit fields, due to the byte > swap on BE machines the containing value was corrupted. Therefore > reading ext4 filesystems on BE machines where broken before. > > Signed-off-by: Rommel Custodio <[email protected]> > [sent via git-send-email; rework commit message] > Signed-off-by: Andreas Bießmann <[email protected]> > > --- > fs/ext4/ext4_common.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c > index 2776293..ff9c4ec 100644 > --- a/fs/ext4/ext4_common.c > +++ b/fs/ext4/ext4_common.c > @@ -1432,7 +1432,7 @@ static struct ext4_extent_header > *ext4fs_get_extent_block while (1) { > index = (struct ext4_extent_idx *)(ext_block + 1); > > - if (le32_to_cpu(ext_block->eh_magic) != > EXT4_EXT_MAGIC) > + if (le16_to_cpu(ext_block->eh_magic) != > EXT4_EXT_MAGIC) return 0; > > if (ext_block->eh_depth == 0) > @@ -1440,14 +1440,14 @@ static struct ext4_extent_header > *ext4fs_get_extent_block i = -1; > do { > i++; > - if (i >= le32_to_cpu(ext_block->eh_entries)) > + if (i >= le16_to_cpu(ext_block->eh_entries)) > break; > } while (fileblock > le32_to_cpu(index[i].ei_block)); > > if (--i < 0) > return 0; > > - block = le32_to_cpu(index[i].ei_leaf_hi); > + block = le16_to_cpu(index[i].ei_leaf_hi); > block = (block << 32) + > le32_to_cpu(index[i].ei_leaf_lo); > if (ext4fs_devread((lbaint_t)block << log2_blksz, 0, > fs->blksz, @@ -1548,17 +1548,17 @@ long int > read_allocated_block(struct ext2_inode *inode, int fileblock) > do { > i++; > - if (i >= le32_to_cpu(ext_block->eh_entries)) > + if (i >= le16_to_cpu(ext_block->eh_entries)) > break; > } while (fileblock >= > le32_to_cpu(extent[i].ee_block)); if (--i >= 0) { > fileblock -= le32_to_cpu(extent[i].ee_block); > - if (fileblock >= > le32_to_cpu(extent[i].ee_len)) { > + if (fileblock >= > le16_to_cpu(extent[i].ee_len)) { free(buf); > return 0; > } > > - start = le32_to_cpu(extent[i].ee_start_hi); > + start = le16_to_cpu(extent[i].ee_start_hi); > start = (start << 32) + > le32_to_cpu(extent[i].ee_start_lo); > free(buf); I've tested this patch at LE Samsung Trats board. The code worked as before (ext4ls, ext4load, ext4write) - also taking into account limitation of our platform. Tested-by: Lukasz Majewski <[email protected]> However, we will not run out from refactoring this code. -- Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

