From: Dave Liu Date: Fri, 29 Feb 2008 09:45:31 +0000 (+0800) Subject: fs: Fix ext2 read issue X-Git-Tag: v1.3.2-rc3~3 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=ce1120dd703e6f12c59e4eba9962356a0300b832;p=u-boot fs: Fix ext2 read issue The ext2 aligned process will corrupt the key data struct, the patch fix this. Signed-off-by: Dave Liu --- diff --git a/fs/ext2/dev.c b/fs/ext2/dev.c index 643a1a8c85..1728b34fc8 100644 --- a/fs/ext2/dev.c +++ b/fs/ext2/dev.c @@ -96,8 +96,23 @@ int ext2fs_devread (int sector, int byte_offset, int byte_len, char *buf) { sector++; } + if (byte_len == 0) + return 1; + /* read sector aligned part */ block_len = byte_len & ~(SECTOR_SIZE - 1); + + if (block_len == 0) { + u8 p[SECTOR_SIZE]; + + block_len = SECTOR_SIZE; + ext2fs_block_dev_desc->block_read(ext2fs_block_dev_desc->dev, + part_info.start + sector, + 1, (unsigned long *)p); + memcpy(buf, p, byte_len); + return 1; + } + if (ext2fs_block_dev_desc->block_read (ext2fs_block_dev_desc->dev, part_info.start + sector, block_len / SECTOR_SIZE, @@ -106,6 +121,7 @@ int ext2fs_devread (int sector, int byte_offset, int byte_len, char *buf) { printf (" ** ext2fs_devread() read error - block\n"); return (0); } + block_len = byte_len & ~(SECTOR_SIZE - 1); buf += block_len; byte_len -= block_len; sector += block_len / SECTOR_SIZE;