X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fmd_object.h;h=caf1e164f16dabba5197b039639023cecdd22c85;hb=4cfa87dad0a9c08bba2f86650fafab9ad21fc524;hp=0f72f8e6895401c8cb1d54e007a58a1aee01bf09;hpb=65d63035c60086a89d932c6f9f1691cf93728d74;p=fs%2Flustre-release.git diff --git a/lustre/include/md_object.h b/lustre/include/md_object.h index 0f72f8e..caf1e16 100644 --- a/lustre/include/md_object.h +++ b/lustre/include/md_object.h @@ -63,52 +63,26 @@ struct md_device_operations; struct md_object; struct obd_export; -enum { - UCRED_INVALID = -1, - UCRED_INIT = 0, - UCRED_OLD = 1, - UCRED_NEW = 2 -}; - -enum { - MD_CAPAINFO_MAX = 5 -}; - -/** there are at most 5 fids in one operation, see rename, NOTE the last one - * is a temporary one used for is_subdir() */ -struct md_capainfo { - __u32 mc_auth; - __u32 mc_padding; - struct lu_fid mc_fid[MD_CAPAINFO_MAX]; - struct lustre_capa *mc_capa[MD_CAPAINFO_MAX]; -}; - struct md_quota { struct obd_export *mq_exp; }; -/** - * Implemented in mdd/mdd_handler.c. - * - * XXX should be moved into separate .h/.c together with all md security - * related definitions. - */ -struct md_capainfo *md_capainfo(const struct lu_env *env); 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 { @@ -163,7 +137,7 @@ struct md_attr { struct lu_fid ma_pfid; struct md_hsm ma_hsm; struct lov_mds_md *ma_lmm; - struct lmv_stripe_md *ma_lmv; + union lmv_mds_md *ma_lmv; void *ma_acl; struct llog_cookie *ma_cookie; struct lustre_capa *ma_capa; @@ -206,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). */ @@ -281,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); }; /** @@ -323,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, @@ -352,8 +334,8 @@ struct md_device_operations { int (*mdo_root_get)(const struct lu_env *env, struct md_device *m, struct lu_fid *f); - int (*mdo_maxsize_get)(const struct lu_env *env, struct md_device *m, - int *md_size, int *cookie_size); + int (*mdo_maxeasize_get)(const struct lu_env *env, struct md_device *m, + int *easize); int (*mdo_statfs)(const struct lu_env *env, struct md_device *m, struct obd_statfs *sfs); @@ -497,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); @@ -696,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, @@ -756,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, @@ -856,7 +852,14 @@ struct lu_local_obj_desc { int lustre_buf2som(void *buf, int rc, struct md_som_data *msd); int lustre_buf2hsm(void *buf, int rc, struct md_hsm *mh); -void lustre_hsm2buf(void *buf, struct md_hsm *mh); +void lustre_hsm2buf(void *buf, const struct md_hsm *mh); + +enum { + UCRED_INVALID = -1, + UCRED_INIT = 0, + UCRED_OLD = 1, + UCRED_NEW = 2, +}; struct lu_ucred { __u32 uc_valid; @@ -871,7 +874,7 @@ struct lu_ucred { __u32 uc_suppgids[2]; cfs_cap_t uc_cap; __u32 uc_umask; - cfs_group_info_t *uc_ginfo; + struct group_info *uc_ginfo; struct md_identity *uc_identity; };