From: Justin Maggard Date: Mon, 22 Nov 2010 22:32:28 +0000 (-0500) Subject: Fix EXT4_FEATURE_RO_COMPAT_HUGE_FILE check X-Git-Tag: v1.42-WIP-0702~74^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4fca2b9c07981abca16d337b2e57f78569cbbe05;p=thirdparty%2Fe2fsprogs.git Fix EXT4_FEATURE_RO_COMPAT_HUGE_FILE check Creating a 4TB file on a filesystem with the 64bit flag set results in e2fsck consistently complaining about i_blocks being wrong, with confusing messages like this: Inode 29818882, i_blocks is 8388608816, should be 8388608816. Fix? no That appears to be caused by ext2fs_inode_i_blocks() checking for the EXT4_FEATURE_RO_COMPAT_HUGE_FILE in the wrong place. Fix it. Signed-off-by: Justin Maggard Signed-off-by: Theodore Ts'o --- diff --git a/lib/ext2fs/blknum.c b/lib/ext2fs/blknum.c index a48b696dd..b3e6dcad1 100644 --- a/lib/ext2fs/blknum.c +++ b/lib/ext2fs/blknum.c @@ -49,7 +49,7 @@ blk64_t ext2fs_inode_data_blocks2(ext2_filsys fs, struct ext2_inode *inode) { return (inode->i_blocks | - ((fs->super->s_feature_incompat & + ((fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ? (__u64) inode->osd2.linux2.l_i_blocks_hi << 32 : 0)) - (inode->i_file_acl ? fs->blocksize >> 9 : 0); @@ -62,7 +62,7 @@ blk64_t ext2fs_inode_i_blocks(ext2_filsys fs, struct ext2_inode *inode) { return (inode->i_blocks | - ((fs->super->s_feature_incompat & + ((fs->super->s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_HUGE_FILE) ? (__u64)inode->osd2.linux2.l_i_blocks_hi << 32 : 0)); }