From: Fan Yong Date: Wed, 12 Jul 2017 04:50:41 +0000 (+0800) Subject: LU-9764 lfsck: reset LFSCK trace file if fail to load it X-Git-Tag: 2.11.53~45 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=29c8a763fd7de5fd7b4bf154581f08488e8ce50e;p=fs%2Flustre-release.git LU-9764 lfsck: reset LFSCK trace file if fail to load it If the on-disk LFSCK trace file is corrupted, then LFSCK may get failure when load it. Under such case, the LFSCK should reset (recreate) the traces files by force. Signed-off-by: Fan Yong Change-Id: I0237a88ff23cdec680303ac3976a53c1632598fe Reviewed-on: https://review.whamcloud.com/27997 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Lai Siyao --- diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c index 18e0d47..d7c938d 100644 --- a/lustre/lfsck/lfsck_layout.c +++ b/lustre/lfsck/lfsck_layout.c @@ -6714,14 +6714,17 @@ int lfsck_layout_setup(const struct lu_env *env, struct lfsck_instance *lfsck) com->lc_obj = obj; rc = lfsck_layout_load(env, com); - if (rc > 0) + if (rc > 0) { rc = lfsck_layout_reset(env, com, true); - else if (rc == -ENOENT) + } else if (rc == -ENOENT) { rc = lfsck_layout_init(env, com); - else if (lfsck->li_master) + } else if (lfsck->li_master) { rc = lfsck_load_sub_trace_files(env, com, &dt_lfsck_layout_dangling_features, LFSCK_LAYOUT, false); + if (rc) + rc = lfsck_layout_reset(env, com, true); + } if (rc != 0) GOTO(out, rc); diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c index d7bde61..e9e2249 100644 --- a/lustre/lfsck/lfsck_lib.c +++ b/lustre/lfsck/lfsck_lib.c @@ -2705,10 +2705,14 @@ unlink: RETURN(PTR_ERR(obj)); rc = obj->do_ops->do_index_try(env, obj, ft); - if (rc) + if (rc) { lfsck_object_put(env, obj); - else + CDEBUG(D_LFSCK, "%s: LFSCK fail to load " + "sub trace file %s: rc = %d\n", + lfsck_lfsck2name(com->lc_lfsck), name, rc); + } else { *child = obj; + } RETURN(rc); } diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c index d490fd4..3a0cdd0 100644 --- a/lustre/lfsck/lfsck_namespace.c +++ b/lustre/lfsck/lfsck_namespace.c @@ -6831,13 +6831,16 @@ int lfsck_namespace_setup(const struct lu_env *env, com->lc_obj = obj; rc = lfsck_namespace_load(env, com); - if (rc == -ENODATA) + if (rc == -ENODATA) { rc = lfsck_namespace_init(env, com); - else if (rc < 0) + } else if (rc < 0) { rc = lfsck_namespace_reset(env, com, true); - else + } else { rc = lfsck_load_sub_trace_files(env, com, &dt_lfsck_namespace_features, LFSCK_NAMESPACE, false); + if (rc) + rc = lfsck_namespace_reset(env, com, true); + } if (rc != 0) GOTO(out, rc);