X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flfsck%2Flfsck_engine.c;h=325a7a13725834686caad64c5c1d9079ba46af74;hb=refs%2Fchanges%2F51%2F10751%2F17;hp=6f0ec2437a6b97937f8fad6124d93e0aad921909;hpb=5afd3300d1ded80f79dbea92d47d287ad75f463a;p=fs%2Flustre-release.git diff --git a/lustre/lfsck/lfsck_engine.c b/lustre/lfsck/lfsck_engine.c index 6f0ec24..325a7a1 100644 --- a/lustre/lfsck/lfsck_engine.c +++ b/lustre/lfsck/lfsck_engine.c @@ -155,10 +155,11 @@ static int lfsck_master_dir_engine(const struct lu_env *env, struct lfsck_instance *lfsck) { struct lfsck_thread_info *info = lfsck_env_info(env); - const struct dt_it_ops *iops = - &lfsck->li_obj_dir->do_index_ops->dio_it; + struct dt_object *dir = lfsck->li_obj_dir; + const struct dt_it_ops *iops = &dir->do_index_ops->dio_it; struct dt_it *di = lfsck->li_di_dir; - struct lu_dirent *ent = &info->lti_ent; + struct lu_dirent *ent = + (struct lu_dirent *)info->lti_key; struct lu_fid *fid = &info->lti_fid; struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram; struct ptlrpc_thread *thread = &lfsck->li_thread; @@ -184,6 +185,11 @@ static int lfsck_master_dir_engine(const struct lu_env *env, lfsck->li_args_dir); lfsck_unpack_ent(ent, &lfsck->li_cookie_dir); if (rc != 0) { + CDEBUG(D_LFSCK, "%s: scan dir failed at rec(), " + "parent "DFID", cookie "LPX64": rc = %d\n", + lfsck_lfsck2name(lfsck), + PFID(lfsck_dto2fid(dir)), + lfsck->li_cookie_dir, rc); lfsck_fail(env, lfsck, true); if (bk->lb_param & LPF_FAILOUT) RETURN(rc); @@ -199,6 +205,12 @@ static int lfsck_master_dir_engine(const struct lu_env *env, if (child == NULL) { goto checkpoint; } else if (IS_ERR(child)) { + CDEBUG(D_LFSCK, "%s: scan dir failed at find target, " + "parent "DFID", child %.*s "DFID": rc = %d\n", + lfsck_lfsck2name(lfsck), + PFID(lfsck_dto2fid(dir)), + ent->lde_namelen, ent->lde_name, + PFID(&ent->lde_fid), rc); lfsck_fail(env, lfsck, true); if (bk->lb_param & LPF_FAILOUT) RETURN(PTR_ERR(child)); @@ -221,8 +233,14 @@ checkpoint: /* Rate control. */ lfsck_control_speed(lfsck); - if (unlikely(!thread_is_running(thread))) + if (unlikely(!thread_is_running(thread))) { + CDEBUG(D_LFSCK, "%s: scan dir exit for engine stop, " + "parent "DFID", cookie "LPX64"\n", + lfsck_lfsck2name(lfsck), + PFID(lfsck_dto2fid(dir)), + lfsck->li_cookie_dir); RETURN(0); + } if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_FATAL2)) { spin_lock(&lfsck->li_lock); @@ -286,6 +304,8 @@ static int lfsck_master_oit_engine(const struct lu_env *env, lfsck->li_new_scanned++; rc = iops->rec(env, di, (struct dt_rec *)fid, 0); if (rc != 0) { + CDEBUG(D_LFSCK, "%s: OIT scan failed at rec(): " + "rc = %d\n", lfsck_lfsck2name(lfsck), rc); lfsck_fail(env, lfsck, true); if (rc < 0 && bk->lb_param & LPF_FAILOUT) RETURN(rc); @@ -318,6 +338,10 @@ static int lfsck_master_oit_engine(const struct lu_env *env, if (target == NULL) { goto checkpoint; } else if (IS_ERR(target)) { + CDEBUG(D_LFSCK, "%s: OIT scan failed at find target " + DFID", cookie "LPU64": rc = %d\n", + lfsck_lfsck2name(lfsck), PFID(fid), + iops->store(env, di), rc); lfsck_fail(env, lfsck, true); if (bk->lb_param & LPF_FAILOUT) RETURN(PTR_ERR(target)); @@ -328,8 +352,14 @@ static int lfsck_master_oit_engine(const struct lu_env *env, /* XXX: Currently, skip remote object, the consistency for * remote object will be processed in LFSCK phase III. */ if (dt_object_exists(target) && !dt_object_remote(target)) { - if (update_lma) + if (update_lma) { rc = lfsck_update_lma(env, lfsck, target); + if (rc != 0) + CDEBUG(D_LFSCK, "%s: fail to update " + "LMA for "DFID": rc = %d\n", + lfsck_lfsck2name(lfsck), + PFID(lfsck_dto2fid(target)), rc); + } if (rc == 0) rc = lfsck_exec_oit(env, lfsck, target); } @@ -358,8 +388,12 @@ checkpoint: else if (likely(rc == 0)) lfsck->li_current_oit_processed = 0; - if (unlikely(!thread_is_running(thread))) + if (unlikely(!thread_is_running(thread))) { + CDEBUG(D_LFSCK, "%s: OIT scan exit for engine stop, " + "cookie "LPU64"\n", lfsck_lfsck2name(lfsck), + iops->store(env, di)); RETURN(0); + } } while (rc == 0 || lfsck->li_di_dir != NULL); RETURN(rc); @@ -374,14 +408,15 @@ int lfsck_master_engine(void *args) struct dt_object *oit_obj = lfsck->li_obj_oit; const struct dt_it_ops *oit_iops = &oit_obj->do_index_ops->dio_it; struct dt_it *oit_di; + struct l_wait_info lwi = { 0 }; int rc; ENTRY; oit_di = oit_iops->init(env, oit_obj, lfsck->li_args_oit, BYPASS_CAPA); if (IS_ERR(oit_di)) { rc = PTR_ERR(oit_di); - CERROR("%s: LFSCK, fail to init iteration: rc = %d\n", - lfsck_lfsck2name(lfsck), rc); + CDEBUG(D_LFSCK, "%s: master engine fail to init iteration: " + "rc = %d\n", lfsck_lfsck2name(lfsck), rc); GOTO(fini_args, rc); } @@ -394,7 +429,7 @@ int lfsck_master_engine(void *args) GOTO(fini_oit, rc); CDEBUG(D_LFSCK, "LFSCK entry: oit_flags = %#x, dir_flags = %#x, " - "oit_cookie = "LPU64", dir_cookie = "LPU64", parent = "DFID + "oit_cookie = "LPU64", dir_cookie = "LPX64", parent = "DFID ", pid = %d\n", lfsck->li_args_oit, lfsck->li_args_dir, lfsck->li_pos_current.lp_oit_cookie, lfsck->li_pos_current.lp_dir_cookie, @@ -406,6 +441,13 @@ int lfsck_master_engine(void *args) spin_unlock(&lfsck->li_lock); wake_up_all(&thread->t_ctl_waitq); + l_wait_event(thread->t_ctl_waitq, + lfsck->li_start_unplug || + !thread_is_running(thread), + &lwi); + if (!thread_is_running(thread)) + GOTO(fini_oit, rc = 0); + if (!cfs_list_empty(&lfsck->li_list_scan) || cfs_list_empty(&lfsck->li_list_double_scan)) rc = lfsck_master_oit_engine(env, lfsck); @@ -413,7 +455,7 @@ int lfsck_master_engine(void *args) rc = 1; CDEBUG(D_LFSCK, "LFSCK exit: oit_flags = %#x, dir_flags = %#x, " - "oit_cookie = "LPU64", dir_cookie = "LPU64", parent = "DFID + "oit_cookie = "LPU64", dir_cookie = "LPX64", parent = "DFID ", pid = %d, rc = %d\n", lfsck->li_args_oit, lfsck->li_args_dir, lfsck->li_pos_current.lp_oit_cookie, lfsck->li_pos_current.lp_dir_cookie,