X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flfsck%2Flfsck_engine.c;h=a1763a683953289c3edf6b6d91126152d8eadba0;hp=606ea88430f99bd232df4ec372edab128f8d1140;hb=59842b15b028246d9d20fb9b8d276e16fffc908c;hpb=97a10cf9797bbed02fb131f6a205b6a0ceeb0525 diff --git a/lustre/lfsck/lfsck_engine.c b/lustre/lfsck/lfsck_engine.c index 606ea88..a1763a6 100644 --- a/lustre/lfsck/lfsck_engine.c +++ b/lustre/lfsck/lfsck_engine.c @@ -136,6 +136,7 @@ static int lfsck_needs_scan_dir(const struct lu_env *env, struct lfsck_thread_info *info = lfsck_env_info(env); struct lu_fid *fid = &info->lti_fid; struct lu_seq_range *range = &info->lti_range; + struct lu_attr *la = &info->lti_la; struct seq_server_site *ss = lfsck_dev_site(lfsck); __u32 idx = lfsck_dev_idx(lfsck); int depth = 0; @@ -144,9 +145,21 @@ static int lfsck_needs_scan_dir(const struct lu_env *env, if (list_empty(&lfsck->li_list_dir) || !S_ISDIR(lfsck_object_type(obj))) return 0; + *fid = *lfsck_dto2fid(obj); + rc = dt_attr_get(env, obj, la); + if (unlikely(rc || (la->la_valid & LA_FLAGS && + la->la_flags & LUSTRE_ORPHAN_FL))) { + /* Orphan directory is empty, does not need scan. */ + CDEBUG(D_INFO, + "%s: skip orphan dir "DFID", %llx/%x: rc = %d\n", + lfsck_lfsck2name(lfsck), PFID(fid), + la->la_valid, la->la_flags, rc); + + return rc; + } + LASSERT(ss != NULL); - *fid = *lfsck_dto2fid(obj); while (1) { /* Global /ROOT is visible. */ if (unlikely(lu_fid_eq(fid, &lfsck->li_global_root_fid))) @@ -177,6 +190,7 @@ static int lfsck_needs_scan_dir(const struct lu_env *env, if (fid_is_norm(fid)) return 1; + /* Only true after "obj = NULL" set below */ if (obj == NULL) { obj = lfsck_object_find_bottom(env, lfsck, fid); if (IS_ERR(obj)) @@ -960,19 +974,8 @@ static int lfsck_master_oit_engine(const struct lu_env *env, goto checkpoint; } - if (dt_object_exists(target)) { - struct lu_attr la = { .la_valid = 0 }; - - rc = dt_attr_get(env, target, &la); - if (likely(!rc && (!(la.la_valid & LA_FLAGS) || - !(la.la_flags & LUSTRE_ORPHAN_FL)))) - rc = lfsck_exec_oit(env, lfsck, target); - else - CDEBUG(D_INFO, - "%s: orphan "DFID", %llx/%x: rc = %d\n", - lfsck_lfsck2name(lfsck), PFID(fid), - la.la_valid, la.la_flags, rc); - } + if (dt_object_exists(target)) + rc = lfsck_exec_oit(env, lfsck, target); lfsck_object_put(env, target); if (rc != 0 && bk->lb_param & LPF_FAILOUT)