From: Theodore Ts'o Date: Mon, 17 Mar 2025 14:38:44 +0000 (-0400) Subject: e2fsck: fix logic bug when there are no references to an EA inode X-Git-Tag: v1.47.3-rc1~116 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92b6e93936d7a0f6d7ce7a9f142e2c0ee9afbeaf;p=thirdparty%2Fe2fsprogs.git e2fsck: fix logic bug when there are no references to an EA inode There was a boolean logic error which, among other things, could cause an attempt to modify an inode in e2fsck -n mode: e2fsck 1.47.2 (1-Jan-2025) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts ext2fs_write_inode: Attempt to write to filesystem opened read-only while writing inode 14 in pass4 e2fsck: aborted Fixes: 849a9e6e133a ("e2fsck: add more checks for ea inode consistency") Signed-off-by: Theodore Ts'o --- diff --git a/e2fsck/pass4.c b/e2fsck/pass4.c index cf0cf7c4..cee3be64 100644 --- a/e2fsck/pass4.c +++ b/e2fsck/pass4.c @@ -120,7 +120,7 @@ static void check_ea_inode(e2fsck_t ctx, ext2_ino_t i, ext2_ino_t *last_ino, * will get attached to lost+found so clear EA_INODE_FL. * Otherwise this is likely a spuriously set flag so clear it. */ - if (*link_counted == 0 || + if (*link_counted == 0 && fix_problem(ctx, PR_4_EA_INODE_SPURIOUS_FLAG, &pctx)) { /* Clear EA_INODE_FL (likely a normal file) */ inode->i_flags &= ~EXT4_EA_INODE_FL;