X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fmd_object.h;h=caf1e164f16dabba5197b039639023cecdd22c85;hb=4cfa87dad0a9c08bba2f86650fafab9ad21fc524;hp=583951737a524a04fcdc36c8e9f56676b3ed6dbb;hpb=5f3e926ac9ff8ad134ad920d0e8545e16395ef3b;p=fs%2Flustre-release.git diff --git a/lustre/include/md_object.h b/lustre/include/md_object.h index 5839517..caf1e16 100644 --- a/lustre/include/md_object.h +++ b/lustre/include/md_object.h @@ -71,17 +71,18 @@ struct md_quota *md_quota(const struct lu_env *env); /** 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 { @@ -179,6 +180,7 @@ struct md_op_spec { const struct dt_index_features *sp_feat; }; +union ldlm_policy_data; /** * Operations implemented for each md object (both directory and leaf). */ @@ -254,7 +256,11 @@ struct md_object_operations { 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); }; /** @@ -296,6 +302,9 @@ struct md_dir_operations { 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, @@ -470,12 +479,6 @@ static inline struct md_object *md_object_next(const struct md_object *obj) 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); @@ -669,12 +672,21 @@ static inline int mo_object_lock(const struct lu_env *env, 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, @@ -729,6 +741,17 @@ static inline int mdo_rename(const struct lu_env *env, 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,