unsigned int pool_spill_threshold_pct;
atomic_t pool_spill_hit;
char pool_spill_target[LOV_MAXPOOLNAME + 1];
+ bool pool_same_space; /* targets in pool balanced*/
+ time64_t pool_same_space_expire; /*uses ld_qos_maxage*/
};
struct lod_device;
/* max stripe count if stripe count is set to -1. 0 means unlimited */
unsigned int lod_max_stripecount;
+ unsigned int lod_max_mdt_stripecount;
};
#define lod_ost_bitmap lod_ost_descs.ltd_tgt_bitmap
lds_dir_def_striping_set:1;
};
-static inline __u8 lmv_inherit_next(__u8 inherit)
-{
- if (inherit == LMV_INHERIT_END || inherit == LMV_INHERIT_NONE)
- return LMV_INHERIT_NONE;
-
- if (inherit == LMV_INHERIT_UNLIMITED || inherit > LMV_INHERIT_MAX)
- return inherit;
-
- return inherit - 1;
-}
-
-static inline __u8 lmv_inherit_rr_next(__u8 inherit_rr)
-{
- if (inherit_rr == LMV_INHERIT_RR_NONE ||
- inherit_rr == LMV_INHERIT_RR_UNLIMITED ||
- inherit_rr > LMV_INHERIT_RR_MAX)
- return inherit_rr;
-
- return inherit_rr - 1;
-}
+enum layout_verify_flags {
+ LVF_ALL_STALE = BIT(0), /* check not all stale mirrors */
+};
struct lod_mirror_entry {
__u16 lme_stale:1,
/* common fields for both files and directories */
struct dt_object ldo_obj;
struct mutex ldo_layout_mutex;
+ /* foreign file/directory */
+ __u32 ldo_is_foreign:1;
union {
/* file stripe (LOV) */
struct {
struct lod_mirror_entry *ldo_mirrors;
__u32 ldo_is_composite:1,
ldo_flr_state:4,
- ldo_comp_cached:1,
- ldo_is_foreign:1;
+ ldo_comp_cached:1;
};
/* directory stripe (LMV) */
struct {
__u32 ldo_dir_slave_stripe:1,
ldo_dir_striped:1,
/* the stripe has been loaded */
- ldo_dir_stripe_loaded:1,
- /* foreign directory */
- ldo_dir_is_foreign;
+ ldo_dir_stripe_loaded:1;
/*
* This default LMV is parent default LMV, which will be
* used in child creation, and it's not cached, so this
return 0;
}
-static inline int lod_set_def_pool(struct lod_default_striping *lds,
- int i, const char *new_pool)
-{
- return lod_set_pool(&lds->lds_def_comp_entries[i].llc_pool, new_pool);
-}
-
static inline int lod_obj_set_pool(struct lod_object *lo, int i,
const char *new_pool)
{
struct lod_tgt_descs *ltd);
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);
+ const struct lu_buf *buf, enum layout_verify_flags lvf);
void lod_dom_stripesize_recalc(struct lod_device *d);
int lod_get_ea(const struct lu_env *env, struct lod_object *lo,
int lod_pools_init(struct lod_device *m, struct lustre_cfg *cfg);
int lod_pools_fini(struct lod_device *m);
int lod_parse_striping(const struct lu_env *env, struct lod_object *mo,
- const struct lu_buf *buf);
+ const struct lu_buf *buf, enum layout_verify_flags lvf);
int lod_parse_dir_striping(const struct lu_env *env, struct lod_object *lo,
const struct lu_buf *buf);
int lod_initialize_objects(const struct lu_env *env, struct lod_object *mo,
char **poolname);
void lod_spill_target_refresh(const struct lu_env *env, struct lod_device *lod,
struct pool_desc *pool);
+struct pool_desc *lod_pool_find(struct lod_device *lod, char *poolname);
extern struct lprocfs_vars lprocfs_lod_spill_vars[];
#endif