Whamcloud - gitweb
e2fsck: check inline directory data "block" first
authorDarrick J. Wong <darrick.wong@oracle.com>
Sun, 10 Aug 2014 22:39:47 +0000 (18:39 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 10 Aug 2014 22:39:47 +0000 (18:39 -0400)
Since the inline data flag will cause the extent/block map iteration
code to abort fsck early, move the test for the inode flag and the
actual block check call further forward in check_blocks.  This
eliminates an e2fsck abort on an inline data symlink when the file ACL
block is set.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
e2fsck/pass1.c

index 74eed4e..41441b6 100644 (file)
@@ -2620,7 +2620,9 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
                pb.num_blocks++;
        }
 
-       if (ext2fs_inode_has_valid_blocks2(fs, inode)) {
+       if (inlinedata_fs && (inode->i_flags & EXT4_INLINE_DATA_FL))
+               check_blocks_inline_data(ctx, pctx, &pb);
+       else if (ext2fs_inode_has_valid_blocks2(fs, inode)) {
                if (extent_fs && (inode->i_flags & EXT4_EXTENTS_FL))
                        check_blocks_extents(ctx, pctx, &pb);
                else {
@@ -2656,10 +2658,6 @@ static void check_blocks(e2fsck_t ctx, struct problem_context *pctx,
                        fs->flags = (flags & EXT2_FLAG_IGNORE_CSUM_ERRORS) |
                                    (fs->flags & ~EXT2_FLAG_IGNORE_CSUM_ERRORS);
                }
-       } else {
-               /* check inline data */
-               if (inlinedata_fs && (inode->i_flags & EXT4_INLINE_DATA_FL))
-                       check_blocks_inline_data(ctx, pctx, &pb);
        }
        end_problem_latch(ctx, PR_LATCH_BLOCK);
        end_problem_latch(ctx, PR_LATCH_TOOBIG);