X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flfsck%2Flfsck_namespace.c;h=f4308bc02d18e753c84b83312f4c7b3ed27b545f;hp=143ce7744cb9b4beffe42e7e41822d2ea75603a7;hb=44888417ecbf09fc6f294311dd98914aefda05c4;hpb=41ef9e4b10853c985b17e2ca5a0c430b11b40d60 diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c index 143ce77..f4308bc 100644 --- a/lustre/lfsck/lfsck_namespace.c +++ b/lustre/lfsck/lfsck_namespace.c @@ -4884,6 +4884,7 @@ static int lfsck_namespace_assistant_handler_p1(const struct lu_env *env, bool remove; bool newdata; bool log = false; + bool bad_hash = false; int idx = 0; int count = 0; int rc; @@ -4910,6 +4911,12 @@ static int lfsck_namespace_assistant_handler_p1(const struct lu_env *env, GOTO(out, rc); } + if (unlikely(lnr->lnr_dir_cookie == MDS_DIR_END_OFF)) { + rc = lfsck_namespace_striped_dir_rescan(env, com, lnr); + + RETURN(rc); + } + if (lnr->lnr_name[0] == '.' && (lnr->lnr_namelen == 1 || fid_seq_is_dot(fid_seq(&lnr->lnr_fid)))) GOTO(out, rc = 0); @@ -5200,6 +5207,19 @@ stop: out: lfsck_ibits_unlock(&lh, LCK_EX); + if (!name_is_dot_or_dotdot(lnr->lnr_name, lnr->lnr_namelen) && + !lfsck_is_valid_slave_name_entry(env, lnr->lnr_lmv, + lnr->lnr_name, lnr->lnr_namelen) && + type != LNIT_BAD_DIRENT) { + ns->ln_flags |= LF_INCONSISTENT; + + log = false; + rc = lfsck_namespace_repair_bad_name_hash(env, com, dir, + lnr->lnr_lmv, lnr->lnr_name); + if (rc >= 0) + bad_hash = true; + } + if (rc >= 0) { switch (type) { case LNIT_BAD_TYPE: @@ -5277,6 +5297,21 @@ out: false); } + if (bad_hash) { + ns->ln_name_hash_repaired++; + + /* Not count repeatedly. */ + if (!repaired) + ns->ln_items_repaired++; + + if (bk->lb_param & LPF_DRYRUN && + lfsck_pos_is_zero(&ns->ln_pos_first_inconsistent)) + lfsck_pos_fill(env, lfsck, + &ns->ln_pos_first_inconsistent, + false); + } + + rc = 0; } up_write(&com->lc_sem);