From: Wang Shilong Date: Tue, 25 Aug 2020 08:12:37 +0000 (+0800) Subject: LU-8465 e2fsck: merge inode_badness after threads finish X-Git-Tag: v1.45.6.wc2~41 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=1054ce57781b9f82fd749a4916529aed4b093d52;p=tools%2Fe2fsprogs.git LU-8465 e2fsck: merge inode_badness after threads finish inode_badness is only specific for master-lustre branch, seperate it and fix a bug that inode_badness is not freed properly Signed-off-by: Wang Shilong Change-Id: I75a54adc088cb5b636171e4ee7929496858fedf9 Reviewed-on: https://review.whamcloud.com/39843 Reviewed-by: Andreas Dilger Tested-by: jenkins Tested-by: Maloo --- diff --git a/e2fsck/e2fsck.c b/e2fsck/e2fsck.c index 67d3f26..72c6bb7 100644 --- a/e2fsck/e2fsck.c +++ b/e2fsck/e2fsck.c @@ -79,6 +79,10 @@ errcode_t e2fsck_reset_context(e2fsck_t ctx) ext2fs_free_icount(ctx->inode_link_info); ctx->inode_link_info = 0; } + if (ctx->inode_badness) { + ext2fs_free_icount(ctx->inode_badness); + ctx->inode_badness = 0; + } if (ctx->journal_io) { if (ctx->fs && ctx->fs->io != ctx->journal_io) io_channel_close(ctx->journal_io); diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index fe9afd4..ba21897 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -2666,6 +2666,11 @@ static errcode_t e2fsck_pass1_merge_icounts(e2fsck_t global_ctx, e2fsck_t thread return ret; ret = e2fsck_pass1_merge_icount(&global_ctx->inode_link_info, &thread_ctx->inode_link_info); + if (ret) + return ret; + + ret = e2fsck_pass1_merge_icount(&global_ctx->inode_badness, + &thread_ctx->inode_badness); return ret; } @@ -2692,6 +2697,7 @@ static int e2fsck_pass1_thread_join_one(e2fsck_t global_ctx, e2fsck_t thread_ctx ext2fs_block_bitmap inodes_to_rebuild = global_ctx->inodes_to_rebuild; ext2_icount_t inode_count = global_ctx->inode_count; ext2_icount_t inode_link_info = global_ctx->inode_link_info; + ext2_icount_t inode_badness = global_ctx->inode_badness; #ifdef HAVE_SETJMP_H jmp_buf old_jmp; @@ -2718,6 +2724,7 @@ static int e2fsck_pass1_thread_join_one(e2fsck_t global_ctx, e2fsck_t thread_ctx e2fsck_pass1_merge_dir_info(global_ctx, thread_ctx); global_ctx->inode_count = inode_count; global_ctx->inode_link_info = inode_link_info; + global_ctx->inode_badness = inode_badness; /* Keep the global singal flags*/ global_ctx->flags |= (flags & E2F_FLAG_SIGNAL_MASK) | @@ -2826,6 +2833,7 @@ static int e2fsck_pass1_thread_join(e2fsck_t global_ctx, e2fsck_t thread_ctx) e2fsck_free_dir_info(thread_ctx); ext2fs_free_icount(thread_ctx->inode_count); ext2fs_free_icount(thread_ctx->inode_link_info); + ext2fs_free_icount(thread_ctx->inode_badness); ext2fs_free_mem(&thread_ctx); return retval;