Return-Path: Received: from mail2-drop-p1.anu.edu.au ([130.56.64.27]:37350 "EHLO mail2-drop-p1.anu.edu.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726111AbeKMOmf (ORCPT ); Tue, 13 Nov 2018 09:42:35 -0500 From: Li Dongyang To: linux-ext4@vger.kernel.org Cc: adilger@dilger.ca Subject: [PATCH v2] e2fsck: check xattr 'system.data' before setting inline_data feature Date: Tue, 13 Nov 2018 15:46:03 +1100 Message-Id: <20181113044603.1089-1-dongyangli@ddn.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-ext4-owner@vger.kernel.org List-ID: ext2fs_inline_data_size will happy return 0 and set size to EXT4_MIN_INLINE_DATA_SIZE even when inode doesn't have xattr 'system.data', a corrupted i_flags could make e2fsck enable the inline_data on the superblock. We should only offer to enable inline_data when i_flags is set and xattr 'system.data' can be found. Also use correct prompt for PR_1_INLINE_DATA_FEATURE. Signed-off-by: Li Dongyang --- e2fsck/pass1.c | 4 ++-- e2fsck/problem.c | 2 +- tests/f_inlinedata_flags/expect.1 | 26 ++++++++++++++++++++++++++ tests/f_inlinedata_flags/expect.2 | 7 +++++++ tests/f_inlinedata_flags/image.gz | Bin 0 -> 11226 bytes tests/f_inlinedata_flags/name | 1 + 6 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 tests/f_inlinedata_flags/expect.1 create mode 100644 tests/f_inlinedata_flags/expect.2 create mode 100644 tests/f_inlinedata_flags/image.gz create mode 100644 tests/f_inlinedata_flags/name v2: - Add tests/f_inlinedata_flags diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index 8abf0c33..45534388 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -1496,8 +1496,8 @@ void e2fsck_pass1(e2fsck_t ctx) (ino >= EXT2_FIRST_INODE(fs->super))) { size_t size = 0; - pctx.errcode = ext2fs_inline_data_size(fs, ino, &size); - if (!pctx.errcode && size && + pctx.errcode = get_inline_data_ea_size(fs, ino, &size); + if (!pctx.errcode && fix_problem(ctx, PR_1_INLINE_DATA_FEATURE, &pctx)) { ext2fs_set_feature_inline_data(sb); ext2fs_mark_super_dirty(fs); diff --git a/e2fsck/problem.c b/e2fsck/problem.c index 932cad3c..4082e373 100644 --- a/e2fsck/problem.c +++ b/e2fsck/problem.c @@ -1063,7 +1063,7 @@ static struct e2fsck_problem problem_table[] = { /* Inode has inline data, but superblock is missing INLINE_DATA feature */ { PR_1_INLINE_DATA_FEATURE, N_("@i %i has inline data, but @S is missing INLINE_DATA feature\n"), - PROMPT_CLEAR, PR_PREEN_OK, 0, 0, 0 }, + PROMPT_FIX, PR_PREEN_OK, 0, 0, 0 }, /* inode has INLINE_DATA_FL flag on filesystem without inline data */ { PR_1_INLINE_DATA_SET, diff --git a/tests/f_inlinedata_flags/expect.1 b/tests/f_inlinedata_flags/expect.1 new file mode 100644 index 00000000..86eba883 --- /dev/null +++ b/tests/f_inlinedata_flags/expect.1 @@ -0,0 +1,26 @@ +Pass 1: Checking inodes, blocks, and sizes +Inode 12 has INLINE_DATA_FL flag on filesystem without inline data support. +Clear? yes + +Inode 13 has inline data, but superblock is missing INLINE_DATA feature +Fix? yes + +Pass 2: Checking directory structure +Entry '1' in / (2) has deleted/unused inode 12. Clear? yes + +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +Inode bitmap differences: -12 +Fix? yes + +Free inodes count wrong for group #0 (243, counted=244). +Fix? yes + +Free inodes count wrong (243, counted=244). +Fix? yes + + +test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** +test_filesys: 12/256 files (0.0% non-contiguous), 1143/8192 blocks +Exit status is 1 diff --git a/tests/f_inlinedata_flags/expect.2 b/tests/f_inlinedata_flags/expect.2 new file mode 100644 index 00000000..87b3f18b --- /dev/null +++ b/tests/f_inlinedata_flags/expect.2 @@ -0,0 +1,7 @@ +Pass 1: Checking inodes, blocks, and sizes +Pass 2: Checking directory structure +Pass 3: Checking directory connectivity +Pass 4: Checking reference counts +Pass 5: Checking group summary information +test_filesys: 12/256 files (0.0% non-contiguous), 1143/8192 blocks +Exit status is 0 diff --git a/tests/f_inlinedata_flags/image.gz b/tests/f_inlinedata_flags/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..4344a0a8cc0d711c10beca1ff0ef174d4357f523 GIT binary patch literal 11226 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