static mdl_mode_t cml_lock_mode(const struct lu_env *env,
struct md_object *mo, mdl_mode_t lm)
{
-#if defined(HAVE_SPLIT_SUPPORT)
+#ifdef HAVE_SPLIT_SUPPORT
struct md_attr *ma = &cmm_env_info(env)->cmi_ma;
int rc, split;
ENTRY;
+
memset(ma, 0, sizeof(*ma));
/*
RETURN(MDL_MINMODE);
}
- if (lm == MDL_PW && split == CMM_EXPECT_SPLIT)
+ if (lm == MDL_PW && split == CMM_EXPECT_SPLIT) {
+ CDEBUG(D_INFO|D_WARNING, "Going to split "DFID"\n",
+ PFID(lu_object_fid(&mo->mo_lu)));
RETURN(MDL_EX);
+ }
RETURN(MDL_MINMODE);
#endif
return MDL_MINMODE;
}
static mdl_mode_t mdt_mdl_lock_modes[] = {
- [0] = MDL_MINMODE,
- [1] = MDL_EX,
- [2] = MDL_PW,
- [3] = MDL_PR,
- [4] = MDL_CW,
- [5] = MDL_CR,
- [6] = MDL_NL,
- [7] = MDL_GROUP
+ [LCK_MINMODE] = MDL_MINMODE,
+ [LCK_EX] = MDL_EX,
+ [LCK_PW] = MDL_PW,
+ [LCK_PR] = MDL_PR,
+ [LCK_CW] = MDL_CW,
+ [LCK_CR] = MDL_CR,
+ [LCK_NL] = MDL_NL,
+ [LCK_GROUP] = MDL_GROUP
};
static ldlm_mode_t mdt_ldlm_lock_modes[] = {
- [0] = LCK_MINMODE,
- [1] = LCK_EX,
- [2] = LCK_PW,
- [3] = LCK_PR,
- [4] = LCK_CW,
- [5] = LCK_CR,
- [6] = LCK_NL,
- [7] = LCK_GROUP
+ [MDL_MINMODE] = LCK_MINMODE,
+ [MDL_EX] = LCK_EX,
+ [MDL_PW] = LCK_PW,
+ [MDL_PR] = LCK_PR,
+ [MDL_CW] = LCK_CW,
+ [MDL_CR] = LCK_CR,
+ [MDL_NL] = LCK_NL,
+ [MDL_GROUP] = LCK_GROUP
};
static inline mdl_mode_t mdt_ldlm_mode2mdl_mode(ldlm_mode_t mode)
{
- int idx = ffs((int)mode);
-
- LASSERT(idx >= 0);
LASSERT(IS_PO2(mode));
- LASSERT(idx < ARRAY_SIZE(mdt_mdl_lock_modes));
- return mdt_mdl_lock_modes[idx];
+ return mdt_mdl_lock_modes[mode];
}
static inline ldlm_mode_t mdt_mdl_mode2ldlm_mode(mdl_mode_t mode)
{
- int idx = ffs((int)mode);
-
- LASSERT(idx >= 0);
LASSERT(IS_PO2(mode));
- LASSERT(idx < ARRAY_SIZE(mdt_ldlm_lock_modes));
- return mdt_ldlm_lock_modes[idx];
+ return mdt_ldlm_lock_modes[mode];
}
void mdt_lock_reg_init(struct mdt_lock_handle *lh, ldlm_mode_t lm)
mode = mdo_lock_mode(info->mti_env, mdt_object_child(o),
mdt_ldlm_mode2mdl_mode(lm));
} else {
- /* Default locks for non-existing objects. */
- mode = MDL_MINMODE;
+ /*
+ * No pdo locks possible on not existing objects, because pdo
+ * lock is taken on parent dir and it can't absent.
+ */
+ LBUG();
}
if (mode != MDL_MINMODE) {