X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flfsck%2Flfsck_engine.c;h=7f8e3fc4d95a971de989a3adff32702823325022;hp=e55c04f6d79b5123755ca284ccc3e817105155a3;hb=0347ad57ee875b730c3ec0da203857a5c86fc394;hpb=8931d9070415e808e09bb4befd7cd38ef2431149 diff --git a/lustre/lfsck/lfsck_engine.c b/lustre/lfsck/lfsck_engine.c index e55c04f..7f8e3fc 100644 --- a/lustre/lfsck/lfsck_engine.c +++ b/lustre/lfsck/lfsck_engine.c @@ -361,38 +361,33 @@ checkpoint: int lfsck_master_engine(void *args) { - struct lu_env env; - struct lfsck_instance *lfsck = (struct lfsck_instance *)args; - struct ptlrpc_thread *thread = &lfsck->li_thread; - 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; - int rc; + struct lfsck_thread_args *lta = args; + struct lu_env *env = <a->lta_env; + struct lfsck_instance *lfsck = lta->lta_lfsck; + struct ptlrpc_thread *thread = &lfsck->li_thread; + 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; + int rc; ENTRY; - rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD); - if (rc != 0) { - CERROR("%s: LFSCK, fail to init env, rc = %d\n", - lfsck_lfsck2name(lfsck), rc); - GOTO(noenv, rc); - } - - oit_di = oit_iops->init(&env, oit_obj, lfsck->li_args_oit, BYPASS_CAPA); + 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", + CERROR("%s: LFSCK, fail to init iteration: rc = %d\n", lfsck_lfsck2name(lfsck), rc); - GOTO(fini_env, rc); + + GOTO(fini_args, rc); } spin_lock(&lfsck->li_lock); lfsck->li_di_oit = oit_di; spin_unlock(&lfsck->li_lock); - rc = lfsck_prep(&env, lfsck); + rc = lfsck_prep(env, lfsck); if (rc != 0) GOTO(fini_oit, rc); - CDEBUG(D_LFSCK, "LFSCK entry: oit_flags = 0x%x, dir_flags = 0x%x, " + CDEBUG(D_LFSCK, "LFSCK entry: oit_flags = %#x, dir_flags = %#x, " "oit_cookie = "LPU64", dir_cookie = "LPU64", parent = "DFID ", pid = %d\n", lfsck->li_args_oit, lfsck->li_args_dir, lfsck->li_pos_current.lp_oit_cookie, @@ -407,11 +402,11 @@ int lfsck_master_engine(void *args) if (!cfs_list_empty(&lfsck->li_list_scan) || cfs_list_empty(&lfsck->li_list_double_scan)) - rc = lfsck_master_oit_engine(&env, lfsck); + rc = lfsck_master_oit_engine(env, lfsck); else rc = 1; - CDEBUG(D_LFSCK, "LFSCK exit: oit_flags = 0x%x, dir_flags = 0x%x, " + CDEBUG(D_LFSCK, "LFSCK exit: oit_flags = %#x, dir_flags = %#x, " "oit_cookie = "LPU64", dir_cookie = "LPU64", parent = "DFID ", pid = %d, rc = %d\n", lfsck->li_args_oit, lfsck->li_args_dir, lfsck->li_pos_current.lp_oit_cookie, @@ -420,29 +415,28 @@ int lfsck_master_engine(void *args) current_pid(), rc); if (!OBD_FAIL_CHECK(OBD_FAIL_LFSCK_CRASH)) - rc = lfsck_post(&env, lfsck, rc); + rc = lfsck_post(env, lfsck, rc); + if (lfsck->li_di_dir != NULL) - lfsck_close_dir(&env, lfsck); + lfsck_close_dir(env, lfsck); fini_oit: - lfsck_di_oit_put(&env, lfsck); - oit_iops->fini(&env, oit_di); + lfsck_di_oit_put(env, lfsck); + oit_iops->fini(env, oit_di); if (rc == 1) { if (!cfs_list_empty(&lfsck->li_list_double_scan)) - rc = lfsck_double_scan(&env, lfsck); + rc = lfsck_double_scan(env, lfsck); else rc = 0; } /* XXX: Purge the pinned objects in the future. */ -fini_env: - lu_env_fini(&env); - -noenv: +fini_args: spin_lock(&lfsck->li_lock); thread_set_flags(thread, SVC_STOPPED); - wake_up_all(&thread->t_ctl_waitq); spin_unlock(&lfsck->li_lock); + wake_up_all(&thread->t_ctl_waitq); + lfsck_thread_args_fini(lta); return rc; }