X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flod%2Flod_internal.h;h=b4783329227865597a4db6806b736fd06fbe11d7;hp=cb683f1279268dfd6ece1b5f7f6f3dbaf274990e;hb=083d62ee6de5ac6cee95c1d2f86b62b75034093b;hpb=fabf3fe7ac06d916d8c433a99f1f4a4bd3632638 diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h index cb683f1..b478332 100644 --- a/lustre/lod/lod_internal.h +++ b/lustre/lod/lod_internal.h @@ -293,6 +293,7 @@ struct lod_mirror_entry { struct lod_object { /* common fields for both files and directories */ struct dt_object ldo_obj; + struct mutex ldo_layout_mutex; union { /* file stripe (LOV) */ struct { @@ -423,7 +424,6 @@ struct lod_thread_info { struct lu_attr lti_attr; struct lod_it lti_it; struct ldlm_res_id lti_res_id; - struct ost_pool lti_inuse_osts; /* used to hold lu_dirent, sizeof(struct lu_dirent) + NAME_MAX */ char lti_key[sizeof(struct lu_dirent) + NAME_MAX]; @@ -590,8 +590,9 @@ int lod_del_device(const struct lu_env *env, struct lod_device *lod, unsigned gen, bool for_ost); int lod_fini_tgt(const struct lu_env *env, struct lod_device *lod, struct lod_tgt_descs *ltd, bool for_ost); -int lod_load_striping_locked(const struct lu_env *env, struct lod_object *lo); -int lod_load_striping(const struct lu_env *env, struct lod_object *lo); +int lod_striping_load(const struct lu_env *env, struct lod_object *lo); +int lod_striping_reload(const struct lu_env *env, struct lod_object *lo, + const struct lu_buf *buf); int lod_get_ea(const struct lu_env *env, struct lod_object *lo, const char *name); @@ -699,18 +700,21 @@ typedef int (*lod_obj_stripe_cb_t)(const struct lu_env *env, typedef bool (*lod_obj_comp_skip_cb_t)(const struct lu_env *env, struct lod_object *lo, int comp_idx, struct lod_obj_stripe_cb_data *data); +typedef int (*lod_obj_comp_cb_t)(const struct lu_env *env, + struct lod_object *lo, int comp_idx, + struct lod_obj_stripe_cb_data *data); struct lod_obj_stripe_cb_data { union { const struct lu_attr *locd_attr; - struct ost_pool *locd_inuse; + int locd_ost_index; }; lod_obj_stripe_cb_t locd_stripe_cb; lod_obj_comp_skip_cb_t locd_comp_skip_cb; + lod_obj_comp_cb_t locd_comp_cb; bool locd_declare; }; /* lod_qos.c */ -int lod_prepare_inuse(const struct lu_env *env, struct lod_object *lo); int lod_prepare_create(const struct lu_env *env, struct lod_object *lo, struct lu_attr *attr, const struct lu_buf *buf, struct thandle *th); @@ -719,15 +723,11 @@ int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *); void lod_qos_rr_init(struct lod_qos_rr *lqr); int lod_use_defined_striping(const struct lu_env *, struct lod_object *, const struct lu_buf *); -int lod_obj_stripe_set_inuse_cb(const struct lu_env *env, struct lod_object *lo, - struct dt_object *dt, struct thandle *th, - int comp_idx, int stripe_idx, - struct lod_obj_stripe_cb_data *data); int lod_qos_parse_config(const struct lu_env *env, struct lod_object *lo, const struct lu_buf *buf); int lod_qos_prep_create(const struct lu_env *env, struct lod_object *lo, struct lu_attr *attr, struct thandle *th, - int comp_idx, struct ost_pool *inuse); + int comp_idx); __u16 lod_comp_entry_stripe_count(struct lod_object *lo, struct lod_layout_component *entry, bool is_dir); @@ -751,11 +751,14 @@ int lod_declare_striped_create(const struct lu_env *env, struct dt_object *dt, int lod_striped_create(const struct lu_env *env, struct dt_object *dt, struct lu_attr *attr, struct dt_object_format *dof, struct thandle *th); -void lod_object_free_striping(const struct lu_env *env, struct lod_object *lo); +void lod_striping_free_nolock(const struct lu_env *env, struct lod_object *lo); +void lod_striping_free(const struct lu_env *env, struct lod_object *lo); int lod_obj_for_each_stripe(const struct lu_env *env, struct lod_object *lo, struct thandle *th, struct lod_obj_stripe_cb_data *data); +int lod_comp_copy_ost_lists(struct lod_layout_component *lod_comp, + struct lov_user_md_v3 *v3); /* lod_sub_object.c */ struct thandle *lod_sub_get_thandle(const struct lu_env *env,