From: Fan Yong Date: Fri, 13 May 2016 15:51:33 +0000 (+0800) Subject: LU-8301 lfsck: handle ROOT fid properly X-Git-Tag: 2.8.59~34 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=fdda2ad13bf014ec7e492bda3b8276dfd85fcd6d;hp=6c47e7f99f5fa8884751ac549a45dd3c0b81e7f1 LU-8301 lfsck: handle ROOT fid properly It is found that the lfsck_find_mdt_idx_by_fid() will return failure for "ROOT" object. That is incorrect. In fact "ROOT" is always on the MDT0. Test-Paramenters: trivial testlist=sanity-scrub,sanity-lfsck Signed-off-by: Fan Yong Change-Id: I4a1b796ffc574f8f11611d1b329ce79ad2135eb7 Reviewed-on: http://review.whamcloud.com/20869 Reviewed-by: Andreas Dilger Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: Oleg Drokin --- diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c index 634b451..e3be947 100644 --- a/lustre/lfsck/lfsck_lib.c +++ b/lustre/lfsck/lfsck_lib.c @@ -531,6 +531,14 @@ int lfsck_find_mdt_idx_by_fid(const struct lu_env *env, struct lu_seq_range *range = &lfsck_env_info(env)->lti_range; int rc; + if (unlikely(fid_seq(fid) == FID_SEQ_LOCAL_FILE)) { + /* "ROOT" is always on the MDT0. */ + if (lu_fid_eq(fid, &lfsck->li_global_root_fid)) + return 0; + + return lfsck_dev_idx(lfsck); + } + fld_range_set_mdt(range); rc = fld_server_lookup(env, ss->ss_server_fld, fid_seq(fid), range); if (rc == 0) diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c index 6781598..cbac028 100644 --- a/lustre/lfsck/lfsck_namespace.c +++ b/lustre/lfsck/lfsck_namespace.c @@ -5544,7 +5544,8 @@ out: break; } - if (count == 1 && S_ISREG(lfsck_object_type(obj))) + if (obj != NULL && count == 1 && + S_ISREG(lfsck_object_type(obj))) dt_attr_get(env, obj, la); } @@ -5566,15 +5567,14 @@ trace: if (!(bk->lb_param & LPF_FAILOUT)) rc = 0; } else { - if (log) - CDEBUG(D_LFSCK, "%s: namespace LFSCK assistant " - "repaired the entry: "DFID", parent "DFID - ", name %.*s\n", lfsck_lfsck2name(lfsck), - PFID(&lnr->lnr_fid), PFID(pfid), - lnr->lnr_namelen, lnr->lnr_name); - if (repaired) { ns->ln_items_repaired++; + if (log) + CDEBUG(D_LFSCK, "%s: namespace LFSCK assistant " + "repaired the entry: "DFID", parent "DFID + ", name %.*s\n", lfsck_lfsck2name(lfsck), + PFID(&lnr->lnr_fid), PFID(pfid), + lnr->lnr_namelen, lnr->lnr_name); switch (type) { case LNIT_DANGLING: @@ -5601,8 +5601,17 @@ trace: ns->ln_name_hash_repaired++; /* Not count repeatedly. */ - if (!repaired) + if (!repaired) { ns->ln_items_repaired++; + if (log) + CDEBUG(D_LFSCK, "%s: namespace LFSCK " + "assistant repaired the entry: " + DFID", parent "DFID + ", name %.*s\n", + lfsck_lfsck2name(lfsck), + PFID(&lnr->lnr_fid), PFID(pfid), + lnr->lnr_namelen, lnr->lnr_name); + } if (bk->lb_param & LPF_DRYRUN && lfsck_pos_is_zero(&ns->ln_pos_first_inconsistent))