From: Theodore Ts'o Date: Sat, 8 Jun 2013 21:02:54 +0000 (-0400) Subject: Merge branch 'maint' X-Git-Tag: v1.43-WIP-2015-05-18~392 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=e07b71f294fa41fcf6ad29b706b1b953c3b93169;p=tools%2Fe2fsprogs.git Merge branch 'maint' --- e07b71f294fa41fcf6ad29b706b1b953c3b93169 diff --cc e2fsck/pass1.c index 1b410be,af9afe3..e9f0cd4 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@@ -1866,25 -1777,12 +1866,26 @@@ static void scan_extent_node(e2fsck_t c pctx->errcode = ext2fs_extent_get(ehandle, EXT2_EXTENT_FIRST_SIB, &extent); - while (!pctx->errcode && info.num_entries-- > 0) { + while ((pctx->errcode == 0 || + pctx->errcode == EXT2_ET_EXTENT_CSUM_INVALID) && + info.num_entries-- > 0) { + failed_csum = 0; is_leaf = extent.e_flags & EXT2_EXTENT_FLAGS_LEAF; is_dir = LINUX_S_ISDIR(pctx->inode->i_mode); + last_lblk = extent.e_lblk + extent.e_len - 1; problem = 0; + /* Ask to clear a corrupt extent block */ + if (pctx->errcode == EXT2_ET_EXTENT_CSUM_INVALID) { + pctx->blk = extent.e_pblk; + pctx->blk2 = extent.e_lblk; + pctx->num = extent.e_len; + problem = PR_1_EXTENT_CSUM_INVALID; + if (fix_problem(ctx, problem, pctx)) + goto fix_problem_now; + failed_csum = 1; + } + if (extent.e_pblk == 0 || extent.e_pblk < ctx->fs->super->s_first_data_block || extent.e_pblk >= ext2fs_blocks_count(ctx->fs->super))