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 {
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;
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,
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);
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,
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;
__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;
};