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;
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 */
};
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;
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))
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);
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);
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,