Whamcloud - gitweb
LU-7988 hsm: run HSM coordinator once per second at most
[fs/lustre-release.git] / lustre / mdt / mdt_lvb.c
index 6396d5c..d4c5097 100644 (file)
@@ -21,7 +21,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2012, Intel Corporation.
+ * Copyright (c) 2012, 2015, Intel Corporation.
  * Use is subject to license terms.
  *
  * lustre/mdt/mdt_lvb.c
@@ -114,7 +114,8 @@ static int mdt_lvbo_fill(struct ldlm_lock *lock, void *lvb, int lvblen)
                RETURN(rc);
        }
 
-       if (!ldlm_has_layout(lock))
+       /* Only fill layout if layout lock is granted */
+       if (!ldlm_has_layout(lock) || lock->l_granted_mode != lock->l_req_mode)
                RETURN(0);
 
        /* layout lock will be granted to client, fill in lvb with layout */
@@ -122,10 +123,15 @@ static int mdt_lvbo_fill(struct ldlm_lock *lock, void *lvb, int lvblen)
        /* XXX create an env to talk to mdt stack. We should get this env from
         * ptlrpc_thread->t_env. */
        rc = lu_env_init(&env, LCT_MD_THREAD);
-       LASSERT(rc == 0);
+       /* Likely ENOMEM */
+       if (rc)
+               RETURN(rc);
 
        info = lu_context_key_get(&env.le_ctx, &mdt_thread_key);
-       LASSERT(info != NULL);
+       /* Likely ENOMEM */
+       if (info == NULL)
+               GOTO(out, rc = -ENOMEM);
+
        memset(info, 0, sizeof *info);
        info->mti_env = &env;
        info->mti_exp = lock->l_export;
@@ -133,7 +139,7 @@ static int mdt_lvbo_fill(struct ldlm_lock *lock, void *lvb, int lvblen)
 
        /* XXX get fid by resource id. why don't include fid in ldlm_resource */
        fid = &info->mti_tmp_fid2;
-       fid_build_from_res_name(fid, &lock->l_resource->lr_name);
+       fid_extract_from_res_name(fid, &lock->l_resource->lr_name);
 
        obj = mdt_object_find(&env, info->mti_mdt, fid);
        if (IS_ERR(obj))
@@ -154,7 +160,7 @@ static int mdt_lvbo_fill(struct ldlm_lock *lock, void *lvb, int lvblen)
 
                if (lvblen < rc) {
                        CERROR("%s: expected %d actual %d.\n",
-                               info->mti_exp->exp_obd->obd_name, rc, lvblen);
+                               mdt_obd_name(mdt), rc, lvblen);
                        GOTO(out, rc = -ERANGE);
                }
 
@@ -191,9 +197,9 @@ static int mdt_lvbo_free(struct ldlm_resource *res)
 }
 
 struct ldlm_valblock_ops mdt_lvbo = {
-       lvbo_init:      mdt_lvbo_init,
-       lvbo_update:    mdt_lvbo_update,
-       lvbo_size:      mdt_lvbo_size,
-       lvbo_fill:      mdt_lvbo_fill,
-       lvbo_free:      mdt_lvbo_free
+       .lvbo_init      = mdt_lvbo_init,
+       .lvbo_update    = mdt_lvbo_update,
+       .lvbo_size      = mdt_lvbo_size,
+       .lvbo_fill      = mdt_lvbo_fill,
+       .lvbo_free      = mdt_lvbo_free
 };