/** metadata attributes */
enum ma_valid {
- MA_INODE = (1 << 0),
- MA_LOV = (1 << 1),
- MA_COOKIE = (1 << 2),
- MA_FLAGS = (1 << 3),
- MA_LMV = (1 << 4),
- MA_ACL_DEF = (1 << 5),
- MA_LOV_DEF = (1 << 6),
- MA_LAY_GEN = (1 << 7),
- MA_HSM = (1 << 8),
- MA_SOM = (1 << 9),
- MA_PFID = (1 << 10)
+ MA_INODE = (1 << 0),
+ MA_LOV = (1 << 1),
+ MA_COOKIE = (1 << 2),
+ MA_FLAGS = (1 << 3),
+ MA_LMV = (1 << 4),
+ MA_ACL_DEF = (1 << 5),
+ MA_LOV_DEF = (1 << 6),
+ MA_LAY_GEN = (1 << 7),
+ MA_HSM = (1 << 8),
+ MA_SOM = (1 << 9),
+ MA_PFID = (1 << 10),
+ MA_LMV_DEF = (1 << 11)
};
typedef enum {
const struct dt_index_features *sp_feat;
};
+union ldlm_policy_data;
/**
* Operations implemented for each md object (both directory and leaf).
*/
int (*moo_object_lock)(const struct lu_env *env, struct md_object *obj,
struct lustre_handle *lh,
struct ldlm_enqueue_info *einfo,
- void *policy);
+ union ldlm_policy_data *policy);
+ int (*moo_object_unlock)(const struct lu_env *env,
+ struct md_object *obj,
+ struct ldlm_enqueue_info *einfo,
+ union ldlm_policy_data *policy);
};
/**
struct md_object *cobj, const struct lu_name *lname,
struct md_attr *ma, int no_name);
+ int (*mdo_migrate)(const struct lu_env *env, struct md_object *pobj,
+ struct md_object *sobj, const struct lu_name *lname,
+ struct md_object *tobj, struct md_attr *ma);
/** This method is used to compare a requested layout to an existing
* layout (struct lov_mds_md_v1/3 vs struct lov_mds_md_v1/3) */
int (*mdo_lum_lmm_cmp)(const struct lu_env *env,
return (obj ? lu2md(lu_object_next(&obj->mo_lu)) : NULL);
}
-static inline struct md_device *md_obj2dev(const struct md_object *o)
-{
- LASSERT(o == NULL || IS_ERR(o) || lu_device_is_md(o->mo_lu.lo_dev));
- return container_of0(o->mo_lu.lo_dev, struct md_device, md_lu_dev);
-}
-
static inline int md_device_init(struct md_device *md, struct lu_device_type *t)
{
return lu_device_init(&md->md_lu_dev, t);
struct md_object *m,
struct lustre_handle *lh,
struct ldlm_enqueue_info *einfo,
- void *policy)
+ union ldlm_policy_data *policy)
{
LASSERT(m->mo_ops->moo_object_lock);
return m->mo_ops->moo_object_lock(env, m, lh, einfo, policy);
}
+static inline int mo_object_unlock(const struct lu_env *env,
+ struct md_object *m,
+ struct ldlm_enqueue_info *einfo,
+ union ldlm_policy_data *policy)
+{
+ LASSERT(m->mo_ops->moo_object_unlock);
+ return m->mo_ops->moo_object_unlock(env, m, einfo, policy);
+}
+
static inline int mdo_lookup(const struct lu_env *env,
struct md_object *p,
const struct lu_name *lname,
ma);
}
+static inline int mdo_migrate(const struct lu_env *env,
+ struct md_object *pobj,
+ struct md_object *sobj,
+ const struct lu_name *lname,
+ struct md_object *tobj,
+ struct md_attr *ma)
+{
+ LASSERT(pobj->mo_dir_ops->mdo_migrate);
+ return pobj->mo_dir_ops->mdo_migrate(env, pobj, sobj, lname, tobj, ma);
+}
+
static inline int mdo_is_subdir(const struct lu_env *env,
struct md_object *mo,
const struct lu_fid *fid,