From 9302bda131f98323b41ff14d2b488ec3f0beb7d7 Mon Sep 17 00:00:00 2001 From: Andreas Dilger Date: Sat, 23 Jun 2018 17:33:58 -0400 Subject: [PATCH] e2fsck: mark device inodes with EXT4_EXTENTS_FL bad Mark device inodes bad if they have the EXT4_EXTENTS_FL set, since this should never happen and likely shows the inode is corrupt. Change-Id: I85ab667b39ff57c658a779e59f692a080217690e Signed-off-by: Andreas Dilger Signed-off-by: Theodore Ts'o --- e2fsck/pass1.c | 4 ++-- tests/f_extents/expect.1 | 50 ++++++++++++++++++++------------------- tests/f_extents/expect.2 | 2 +- tests/f_extents/image.gz | Bin 20947 -> 20935 bytes 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index 98e80174f..8dfa82a07 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -151,10 +151,10 @@ int e2fsck_pass1_check_device_inode(ext2_filsys fs EXT2FS_ATTR((unused)), int i; /* - * If the index flag is set, then this is a bogus + * If the index or extents flag is set, then this is a bogus * device/fifo/socket */ - if (inode->i_flags & EXT2_INDEX_FL) + if (inode->i_flags & (EXT2_INDEX_FL | EXT4_EXTENTS_FL)) return 0; /* diff --git a/tests/f_extents/expect.1 b/tests/f_extents/expect.1 index da65f9496..b4d36d209 100644 --- a/tests/f_extents/expect.1 +++ b/tests/f_extents/expect.1 @@ -2,14 +2,6 @@ Pass 1: Checking inodes, blocks, and sizes Inode 12 is in extent format, but superblock is missing EXTENTS feature Fix? yes -Inode 12 has an invalid extent - (logical block 0, invalid physical block 21994527527949, len 17) -Clear? yes - -Inode 12 extent tree (at level 1) could be shorter. Fix? yes - -Inode 12, i_blocks is 34, should be 0. Fix? yes - Inode 13 missing EXTENT_FL, but is in extents format Fix? yes @@ -19,47 +11,57 @@ Clear? yes Inode 16, i_blocks is 16, should be 12. Fix? yes -Inode 17 has an invalid extent - (logical block 0, invalid physical block 22011707397135, len 15) -Clear? yes +Inode 18 has corrupt extent header. Clear inode? yes -Inode 17 extent tree (at level 1) could be shorter. Fix? yes +Inode 18, i_blocks is 2, should be 0. Fix? yes -Inode 17, i_blocks is 32, should be 0. Fix? yes -Inode 18 has corrupt extent header. Clear inode? yes +Running additional passes to resolve blocks claimed by more than one inode... +Pass 1B: Rescanning for multiply-claimed blocks +Multiply-claimed block(s) in inode 12: 5133 5124--5125 5129 5132--5133 5142--5145 +Multiply-claimed block(s) in inode 17: 5124--5125 5129 5132 5142--5145 +Pass 1C: Scanning directories for inodes with multiply-claimed blocks +Pass 1D: Reconciling multiply-claimed blocks +(There are 2 inodes containing multiply-claimed blocks.) -Inode 18, i_blocks is 2, should be 0. Fix? yes +File /fdup1 (inode #12, mod time Wed Jul 5 21:55:26 2006) + has 10 multiply-claimed block(s), shared with 1 file(s): + /fdup2 (inode #17, mod time Wed Jul 5 21:55:27 2006) +Clone multiply-claimed blocks? yes -Special (device/socket/fifo) file (inode 19) has extents -or inline-data flag set. Clear? yes +File /fdup2 (inode #17, mod time Wed Jul 5 21:55:27 2006) + has 8 multiply-claimed block(s), shared with 1 file(s): + /fdup1 (inode #12, mod time Wed Jul 5 21:55:26 2006) +Multiply-claimed blocks already reassigned or cloned. -Pass 1E: Optimizing extent trees Pass 2: Checking directory structure Entry 'fbad-flag' in / (2) has deleted/unused inode 18. Clear? yes +Inode 19 (/fbad-sock) is an illegal FIFO. +Clear? yes + Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information -Block bitmap differences: -1081 +4611 -(4613--4614) -(5121--5142) +Block bitmap differences: +4611 -(4613--4614) -(5121--5122) +(5143--5146) Fix? yes -Free blocks count wrong for group #0 (7081, counted=7100). +Free blocks count wrong for group #0 (7081, counted=7067). Fix? yes -Free blocks count wrong (7081, counted=7100). +Free blocks count wrong (7081, counted=7067). Fix? yes Inode bitmap differences: -18 Fix? yes -Free inodes count wrong for group #0 (237, counted=238). +Free inodes count wrong for group #0 (238, counted=239). Fix? yes -Free inodes count wrong (237, counted=238). +Free inodes count wrong (238, counted=239). Fix? yes test_filesys: ***** FILE SYSTEM WAS MODIFIED ***** -test_filesys: 18/256 files (5.6% non-contiguous), 1092/8192 blocks +test_filesys: 17/256 files (17.6% non-contiguous), 1125/8192 blocks Exit status is 1 diff --git a/tests/f_extents/expect.2 b/tests/f_extents/expect.2 index 5c9d6a671..c6c9ec2d8 100644 --- a/tests/f_extents/expect.2 +++ b/tests/f_extents/expect.2 @@ -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: 18/256 files (5.6% non-contiguous), 1092/8192 blocks +test_filesys: 17/256 files (17.6% non-contiguous), 1125/8192 blocks Exit status is 0 diff --git a/tests/f_extents/image.gz b/tests/f_extents/image.gz index 76fc2fbe23f32911005f4df1f27b0424eee71edd..caeadc43e37eb432502c4c52d000f0872a222f9d 100644 GIT binary patch delta 12835 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 N{rqs1j4Xoe{{XU;y{`ZO literal 20947 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 IzA6d+7e(>h5&!@I -- 2.47.2