From: John L. Hammond Date: Thu, 6 Aug 2015 15:20:30 +0000 (-0500) Subject: LU-9167 hsm: use a new environment during HSM purge X-Git-Tag: 2.9.55~65 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=4651199d1c0c2d88f253b6b6478ce1aa8c0649e8;hp=153c25f280d3db722005619ea0db6fbd3d26bc97 LU-9167 hsm: use a new environment during HSM purge In hsm_cancel_all_actions() use a newly allocated environment instead of borrowing it from the coordinator. Signed-off-by: John L. Hammond Change-Id: Idd5f05d1d5629f4e4e627e137e3addc1a51f8a96 Reviewed-by: Mike Pershin Reviewed-by: Dmitry Eremin Reviewed-on: https://review.whamcloud.com/25730 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c index 536320e..851e1f3 100644 --- a/lustre/mdt/mdt_coordinator.c +++ b/lustre/mdt/mdt_coordinator.c @@ -1501,6 +1501,8 @@ static int mdt_cancel_all_cb(const struct lu_env *env, */ static int hsm_cancel_all_actions(struct mdt_device *mdt) { + struct lu_env env; + struct lu_context session; struct mdt_thread_info *mti; struct coordinator *cdt = &mdt->mdt_coordinator; struct cdt_agent_req *car; @@ -1511,8 +1513,25 @@ static int hsm_cancel_all_actions(struct mdt_device *mdt) enum cdt_states save_state; ENTRY; - /* retrieve coordinator context */ - mti = lu_context_key_get(&cdt->cdt_env.le_ctx, &mdt_thread_key); + rc = lu_env_init(&env, LCT_MD_THREAD); + if (rc < 0) + RETURN(rc); + + /* for mdt_ucred(), lu_ucred stored in lu_ucred_key */ + rc = lu_context_init(&session, LCT_SERVER_SESSION); + if (rc < 0) + GOTO(out_env, rc); + + lu_context_enter(&session); + env.le_ses = &session; + + mti = lu_context_key_get(&env.le_ctx, &mdt_thread_key); + LASSERT(mti != NULL); + + mti->mti_env = &env; + mti->mti_mdt = mdt; + + hsm_init_ucred(mdt_ucred(mti)); /* disable coordinator */ save_state = cdt->cdt_state; @@ -1548,7 +1567,7 @@ static int hsm_cancel_all_actions(struct mdt_device *mdt) if (hal == NULL) { mdt_cdt_put_request(car); up_read(&cdt->cdt_request_lock); - GOTO(out, rc = -ENOMEM); + GOTO(out_cdt_state, rc = -ENOMEM); } } @@ -1588,9 +1607,13 @@ static int hsm_cancel_all_actions(struct mdt_device *mdt) rc = cdt_llog_process(mti->mti_env, mti->mti_mdt, mdt_cancel_all_cb, &hcad); -out: +out_cdt_state: /* enable coordinator */ cdt->cdt_state = save_state; + lu_context_exit(&session); + lu_context_fini(&session); +out_env: + lu_env_fini(&env); RETURN(rc); }