X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flod%2Flod_internal.h;h=7d9b95fc51d2d9005b00952ea1ec3e7fbbd555c8;hp=364779180d4dcd3abb81b9b6c9be6cc296e0096f;hb=de2d5808bd2987f76d2486272e1a9c192ba277d4;hpb=5f3e926ac9ff8ad134ad920d0e8545e16395ef3b diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h index 3647791..7d9b95f 100644 --- a/lustre/lod/lod_internal.h +++ b/lustre/lod/lod_internal.h @@ -158,7 +158,8 @@ struct lod_device { spinlock_t lod_connects_lock; int lod_connects; unsigned int lod_recovery_completed:1, - lod_initialized:1; + lod_initialized:1, + lod_lmv_failout:1; /* lov settings descriptor storing static information */ struct lov_desc lod_desc; @@ -247,7 +248,6 @@ struct lod_object { __u16 ldo_def_stripenr; __u16 ldo_def_stripe_offset; struct lod_dir_stripe_info *ldo_dir_stripe; - mdsno_t ldo_mds_num; }; #define ldo_dir_stripe_offset ldo_dir_stripe->ldsi_stripe_offset @@ -261,6 +261,9 @@ struct lod_object { struct lod_it { struct dt_object *lit_obj; /* object from the layer below */ + /* stripe offset of iteration */ + __u32 lit_stripe_index; + __u32 lit_attr; struct dt_it *lit_it; /* iterator from the layer below */ }; @@ -275,6 +278,12 @@ struct lod_thread_info { struct obd_statfs lti_osfs; struct lu_attr lti_attr; struct lod_it lti_it; + struct ldlm_res_id lti_res_id; + /* used to hold lu_dirent, sizeof(struct lu_dirent) + NAME_MAX */ + char lti_key[sizeof(struct lu_dirent) + NAME_MAX]; + struct dt_object_format lti_format; + struct lu_name lti_name; + struct lu_buf lti_linkea_buf; }; extern const struct lu_device_operations lod_lu_ops; @@ -350,13 +359,24 @@ static inline struct lod_thread_info *lod_env_info(const struct lu_env *env) return info; } +static inline struct lu_name * +lod_name_get(const struct lu_env *env, const void *area, int len) +{ + struct lu_name *lname; + + lname = &lod_env_info(env)->lti_name; + lname->ln_name = area; + lname->ln_namelen = len; + return lname; +} + #define lod_foreach_ost(__dev, index) \ if ((__dev)->lod_osts_size > 0) \ cfs_foreach_bit((__dev)->lod_ost_bitmap, (index)) /* lod_dev.c */ int lod_fld_lookup(const struct lu_env *env, struct lod_device *lod, - const struct lu_fid *fid, mdsno_t *tgt, int flags); + const struct lu_fid *fid, __u32 *tgt, int *flags); /* lod_lov.c */ void lod_getref(struct lod_tgt_descs *ltd); void lod_putref(struct lod_device *lod, struct lod_tgt_descs *ltd); @@ -368,7 +388,8 @@ 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(const struct lu_env *env, struct lod_object *mo); +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_get_ea(const struct lu_env *env, struct lod_object *lo, const char *name); @@ -387,7 +408,7 @@ lod_get_lmv_ea(const struct lu_env *env, struct lod_object *lo) static inline int lod_get_default_lmv_ea(const struct lu_env *env, struct lod_object *lo) { - return lod_get_ea(env, lo, XATTR_NAME_DEFALT_LMV); + return lod_get_ea(env, lo, XATTR_NAME_DEFAULT_LMV); } void lod_fix_desc(struct lov_desc *desc); @@ -405,7 +426,8 @@ int lod_initialize_objects(const struct lu_env *env, struct lod_object *mo, struct lov_ost_data_v1 *objs); int lod_store_def_striping(const struct lu_env *env, struct dt_object *dt, struct thandle *th); -int lod_verify_striping(struct lod_device *d, const struct lu_buf *buf, int specific); +int lod_verify_striping(struct lod_device *d, const struct lu_buf *buf, + bool is_from_disk); int lod_generate_and_set_lovea(const struct lu_env *env, struct lod_object *mo, struct thandle *th); int lod_ea_store_resize(struct lod_thread_info *info, int size); @@ -432,11 +454,12 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *); int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *); /* lproc_lod.c */ -void lprocfs_lod_init_vars(struct lprocfs_static_vars *lvars); int lod_procfs_init(struct lod_device *lod); void lod_procfs_fini(struct lod_device *lod); /* lod_object.c */ +int lod_load_lmv_shards(const struct lu_env *env, struct lod_object *lo, + struct lu_buf *buf, bool resize); int lod_object_set_pool(struct lod_object *o, char *pool); int lod_declare_striped_object(const struct lu_env *env, struct dt_object *dt, struct lu_attr *attr,