From: Alex Zhuravlev Date: Tue, 9 Oct 2018 04:32:11 +0000 (+0300) Subject: LU-11483 ldlm ofd_lvbo_init() and mdt_lvbo_fill() create env X-Git-Tag: 2.12.0-RC1~48 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=2339e1b3b69048d65eed1eaa46b307f9116300ee LU-11483 ldlm ofd_lvbo_init() and mdt_lvbo_fill() create env on demand as in very few cases it's called with env undefined. it would be a very big patch to pass env through all the path chains.. Change-Id: Ic6819215877891ad95f2937729941453abf981e7 Signed-off-by: Alex Zhuravlev Reviewed-on: https://review.whamcloud.com/33321 Tested-by: Jenkins Reviewed-by: Patrick Farrell Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- diff --git a/lustre/mdt/mdt_lvb.c b/lustre/mdt/mdt_lvb.c index 90168e3..97df082 100644 --- a/lustre/mdt/mdt_lvb.c +++ b/lustre/mdt/mdt_lvb.c @@ -329,18 +329,26 @@ static int mdt_lvbo_fill(const struct lu_env *env, struct ldlm_lock *lock, struct lu_fid *fid; struct mdt_object *obj = NULL; struct md_object *child = NULL; + struct lu_env _env; int rc; ENTRY; + if (!env) { + rc = lu_env_init(&_env, LCT_DT_THREAD); + if (rc) + RETURN(rc); + env = &_env; + } + mdt = ldlm_lock_to_ns(lock)->ns_lvbp; if (IS_LQUOTA_RES(lock->l_resource)) { if (mdt->mdt_qmt_dev == NULL) - RETURN(0); + GOTO(out_env, rc = 0); /* call lvbo fill function of quota master */ rc = qmt_hdls.qmth_lvbo_fill(mdt->mdt_qmt_dev, lock, lvb, *lvblen); - RETURN(rc); + GOTO(out_env, rc); } info = lu_context_key_get(&env->le_ctx, &mdt_thread_key); @@ -437,7 +445,9 @@ out_put: out: if (rc < 0 && rc != -ERANGE) rc = 0; - +out_env: + if (env == &_env) + lu_env_fini(&_env); RETURN(rc); } diff --git a/lustre/ofd/ofd_lvb.c b/lustre/ofd/ofd_lvb.c index a48b4d5..7b46388 100644 --- a/lustre/ofd/ofd_lvb.c +++ b/lustre/ofd/ofd_lvb.c @@ -88,12 +88,10 @@ static int ofd_lvbo_init(const struct lu_env *env, struct ldlm_resource *res) struct ofd_device *ofd; struct ofd_object *fo; struct ofd_thread_info *info; - int rc = 0; - + struct lu_env _env; + int rc = 0; ENTRY; - LASSERT(env); - info = ofd_info(env); LASSERT(res); LASSERT(mutex_is_locked(&res->lr_lvb_mutex)); @@ -106,10 +104,18 @@ static int ofd_lvbo_init(const struct lu_env *env, struct ldlm_resource *res) if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_OST_LVB)) RETURN(-ENOMEM); + if (!env) { + rc = lu_env_init(&_env, LCT_DT_THREAD); + if (rc) + RETURN(rc); + env = &_env; + } + OBD_ALLOC_PTR(lvb); if (lvb == NULL) GOTO(out, rc = -ENOMEM); + info = ofd_info(env); res->lr_lvb_data = lvb; res->lr_lvb_len = sizeof(*lvb); @@ -144,6 +150,8 @@ out_lvb: OST_LVB_SET_ERR(lvb->lvb_blocks, rc); out: /* Don't free lvb data on lookup error */ + if (env && env == &_env) + lu_env_fini(&_env); return rc; }