From 492f901e2d762af001817e2f1e0e8a5fb5c7b607 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Fri, 25 Jul 2014 17:35:12 -0700 Subject: [PATCH] e2fsck: clear badblocks inode when checksum fails If the badblocks inode fails checksum verification, just clear the inode and move on. If we don't do this, we can end up importing a lot of garbage into the badblocks list, which will then cause fsck to try to regenerate anything that was sitting atop the supposedly damaged blocks. Given that most hardware will remap bad sectors transparently from ext4, the number of people this could affect adversely is pretty low. Signed-off-by: Darrick J. Wong Signed-off-by: Theodore Ts'o --- e2fsck/pass1.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index fcaa679..f90261b 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -970,8 +970,10 @@ void e2fsck_pass1(e2fsck_t ctx) if (ino == EXT2_BAD_INO) { struct process_block_struct pb; - if ((inode->i_mode || inode->i_uid || inode->i_gid || - inode->i_links_count || inode->i_file_acl) && + if ((failed_csum || inode->i_mode || inode->i_uid || + inode->i_gid || inode->i_links_count || + (inode->i_flags & EXT4_INLINE_DATA_FL) || + inode->i_file_acl) && fix_problem(ctx, PR_1_INVALID_BAD_INODE, &pctx)) { memset(inode, 0, sizeof(struct ext2_inode)); e2fsck_write_inode(ctx, ino, inode, -- 1.8.3.1