Whamcloud - gitweb
e2fsck: handle preallocation for large PAGE_SIZE
authorAndreas Dilger <adilger@whamcloud.com>
Fri, 13 Apr 2012 07:59:31 +0000 (01:59 -0600)
committerAndreas Dilger <andreas.dilger@intel.com>
Wed, 24 Apr 2013 04:49:53 +0000 (22:49 -0600)
Fix handling of block preallocation support in cases where the kernel
PAGE_SIZE is larger than the filesystem blocksize.

Signed-off-by: Kalpak Shah <kalpak@clusterfs.com>
Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
e2fsck/pass1.c
tests/f_eofblocks/expect.1
tests/f_eofblocks/expect.2
tests/f_eofblocks/image.gz

index b685854..8993f2d 100644 (file)
@@ -2127,10 +2127,11 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
 
                size = EXT2_I_SIZE(inode);
                if ((pb.last_init_lblock >= 0) &&
-                   /* allow allocated blocks to end of PAGE_SIZE */
+                   /* allow blocks beyond EOF to end of PAGE_SIZE */
                    (size < (__u64)pb.last_init_lblock * fs->blocksize) &&
-                   (pb.last_init_lblock / blkpg * blkpg != pb.last_init_lblock ||
-                    size < (__u64)(pb.last_init_lblock & ~(blkpg-1)) *
+                   ((pb.last_init_lblock + 1) / blkpg * blkpg !=
+                       (pb.last_init_lblock + 1) ||
+                    size < (__u64)(pb.last_init_lblock & ~(blkpg - 1)) *
                     fs->blocksize))
                        bad_size = 3;
                else if (!(extent_fs && (inode->i_flags & EXT4_EXTENTS_FL)) &&
index 2e9133e..3422248 100644 (file)
@@ -1,7 +1,5 @@
 Pass 1: Checking inodes, blocks, and sizes
-Inode 30, i_size is 2048, should be 4096.  Fix? yes
-
-Inode 31, i_size is 2048, should be 4096.  Fix? yes
+Inode 31, i_size is 2048, should be 6144.  Fix? yes
 
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -9,5 +7,5 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 
 test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
-test_filesys: 31/56 files (29.0% non-contiguous), 83/400 blocks
+test_filesys: 31/56 files (29.0% non-contiguous), 85/400 blocks
 Exit status is 1
index 2a2bca5..0cce314 100644 (file)
@@ -3,5 +3,5 @@ Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
-test_filesys: 31/56 files (29.0% non-contiguous), 83/400 blocks
+test_filesys: 31/56 files (29.0% non-contiguous), 85/400 blocks
 Exit status is 0
index 2586a6a..e1177b3 100644 (file)
Binary files a/tests/f_eofblocks/image.gz and b/tests/f_eofblocks/image.gz differ