From 68073429d3c81eebbf502fdc5ff320468e9b0d2c Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Sun, 10 Aug 2014 18:39:47 -0400 Subject: [PATCH] e2fsck: check inline directory data "block" first 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 Signed-off-by: Theodore Ts'o --- e2fsck/pass1.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index 74eed4e4..41441b62 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -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);