From: Darrick J. Wong Date: Sat, 26 Jul 2014 00:35:12 +0000 (-0700) Subject: e2fsck: clear badblocks inode when checksum fails X-Git-Tag: v1.43-WIP-2015-05-18~268^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=492f901e2d762af001817e2f1e0e8a5fb5c7b607;p=thirdparty%2Fe2fsprogs.git 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 --- diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index fcaa6799f..f90261b4e 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,