* GPL HEADER END
*/
/*
- * Copyright (c) 2012, 2013, Intel Corporation.
+ * Copyright (c) 2012, 2015, Intel Corporation.
* Use is subject to license terms.
*
* lustre/mdt/mdt_lvb.c
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 */
/* 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;
}
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
};