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);
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,