From: Kazuya Mio Date: Sat, 26 Nov 2011 02:31:09 +0000 (-0500) Subject: e2fsck: fix the max size calculation for non-extent file X-Git-Tag: v1.42~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66df14687d6a905aa111ec7327357a3ae1ad3236;p=thirdparty%2Fe2fsprogs.git e2fsck: fix the max size calculation for non-extent file When I create a non-extent file with the maximum size in ext4, e2fsck detects the following error: Pass 1: Checking inodes, blocks, and sizes Inode 12, i_size is 4402345721856, should be 4402345721856. Fix? As we know, e2fsck checks the size field of the inode in pass 1. However, in case of the ext4 with the feature of ^extent and huge_file, the maximum file size calculated in e2fsck is less than the real one. The patch fixes this problem. Signed-off-by: Kazuya Mio Signed-off-by: Theodore Ts'o --- diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index 532e132ac..00e46d030 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -583,7 +583,7 @@ void e2fsck_pass1(e2fsck_t ctx) max_sizes = EXT2_NDIR_BLOCKS + EXT2_BPP(i); max_sizes = max_sizes + EXT2_BPP(i) * EXT2_BPP(i); max_sizes = max_sizes + EXT2_BPP(i) * EXT2_BPP(i) * EXT2_BPP(i); - max_sizes = (max_sizes * (1UL << i)) - 1; + max_sizes = (max_sizes * (1UL << i)); ext2_max_sizes[i - EXT2_MIN_BLOCK_LOG_SIZE] = max_sizes; } #undef EXT2_BPP