23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_SNSCM 43 uint64_t
group, uint32_t spare,
44 uint32_t *incoming_unit);
74 uint32_t *in_units_nr,
87 uint32_t tgt_unit_prev;
101 for (unit = 0; unit < upg; ++unit) {
114 if (pcount !=
NULL) {
141 if (pcount !=
NULL) {
151 *in_cp_nr = *in_units_nr = incps;
153 M0_LEAVE(
"incps=%u", (
unsigned)incps);
169 uint64_t data_unit, uint32_t old_tgt_dev,
170 uint64_t *new_tgt_unit)
181 group, data_unit, &spare,
185 *new_tgt_unit = spare;
213 "no other rebalancing target found.",
239 uint64_t
group, uint32_t spare,
240 uint32_t *incoming_unit)
274 *incoming_unit = spare;
306 for (
i = 0;
i < upg; ++
i) {
322 &spare, &spare_prev);
366 #undef M0_TRACE_SUBSYSTEM
static struct m0_addb2_philter p
M0_INTERNAL void m0_sns_cm_unit2cobfid(struct m0_sns_cm_file_ctx *fctx, const struct m0_pdclust_src_addr *sa, struct m0_pdclust_tgt_addr *ta, struct m0_fid *cfid_out)
M0_INTERNAL void m0_sns_cm_cp_tgt_info_fill(struct m0_sns_cm_cp *scp, const struct m0_fid *cob_fid, uint64_t stob_offset, uint64_t ag_cp_idx)
M0_INTERNAL void agid2fid(const struct m0_cm_ag_id *id, struct m0_fid *fid)
const struct m0_sns_cm_helpers rebalance_helpers
M0_INTERNAL const char * m0_sns_cm_tgt_ep(const struct m0_cm *cm, const struct m0_pool_version *pv, const struct m0_fid *cob_fid, struct m0_conf_obj **hostage)
struct m0_pool_version * pm_pver
#define M0_LOG(level,...)
M0_INTERNAL bool m0_sns_cm_is_local_cob(const struct m0_cm *cm, const struct m0_pool_version *pv, const struct m0_fid *cob_fid)
M0_INTERNAL int m0_sns_repair_spare_map(struct m0_poolmach *pm, const struct m0_fid *fid, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group, uint64_t unit, uint32_t *spare_slot_out, uint32_t *spare_slot_out_prev)
M0_INTERNAL int m0_sns_cm_rebalance_ag_setup(struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl)
M0_INTERNAL int m0_sns_repair_spare_rebalancing(struct m0_poolmach *pm, const struct m0_fid *fid, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group, uint64_t unit, uint32_t *spare_slot_out, uint32_t *spare_slot_out_prev)
struct m0_layout * sf_layout
struct m0_cm_ag_id cag_id
M0_INTERNAL void m0_sns_cm_fctx_unlock(struct m0_sns_cm_file_ctx *fctx)
static struct m0_sns_cm * scm
M0_INTERNAL int m0_poolmach_device_state(struct m0_poolmach *pm, uint32_t device_index, enum m0_pool_nd_state *state_out)
M0_INTERNAL int m0_sns_cm_ag_tgt_unit2cob(struct m0_sns_cm_ag *sag, uint64_t tgt_unit, struct m0_fid *cobfid)
struct m0_poolmach * sf_pm
M0_INTERNAL bool m0_fid_is_set(const struct m0_fid *fid)
M0_INTERNAL uint64_t m0_sns_cm_ag_unit2cobindex(struct m0_sns_cm_ag *sag, uint64_t unit)
static bool is_spare_relevant(const struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group, uint32_t spare, uint32_t *incoming_unit)
int(* sch_ag_in_cp_units)(const struct m0_sns_cm *scm, const struct m0_cm_ag_id *id, struct m0_sns_cm_file_ctx *fctx, uint32_t *in_cp_nr, uint32_t *in_units_nr, struct m0_cm_proxy_in_count *pcount)
M0_INTERNAL uint64_t agid2group(const struct m0_cm_ag_id *id)
static struct m0_sns_cm_ag * sag
M0_INTERNAL bool m0_sns_cm_is_cob_rebalancing(struct m0_poolmach *pm, uint32_t cob_index)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL uint32_t m0_sns_cm_device_index_get(uint64_t group, uint64_t unit_number, struct m0_sns_cm_file_ctx *fctx)
static bool rebalance_is_cob_failed(struct m0_poolmach *pm, uint32_t cob_index)
M0_INTERNAL int m0_sns_cm_cob_locate(struct m0_cob_domain *cdom, const struct m0_fid *cob_fid)
static uint64_t rebalance_ag_unit_end(const struct m0_pdclust_layout *pl)
static struct m0_fid cob_fid
M0_INTERNAL struct m0_pdclust_layout * m0_layout_to_pdl(const struct m0_layout *l)
struct m0_pdclust_instance pi
M0_INTERNAL bool m0_sns_cm_is_cob_repaired(struct m0_poolmach *pm, uint32_t cob_index)
M0_INTERNAL uint64_t m0_sns_cm_ag_spare_unit_nr(const struct m0_pdclust_layout *pl, uint64_t fidx)
M0_INTERNAL int m0_sns_repair_data_map(struct m0_poolmach *pm, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group_number, uint64_t spare_unit_number, uint64_t *data_unit_id_out)
static m0_bindex_t offset
M0_INTERNAL void m0_sns_cm_fctx_lock(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL int m0_sns_cm_rebalance_tgt_info(struct m0_sns_cm_ag *sag, struct m0_sns_cm_cp *scp)
static int rebalance_cob_locate(struct m0_sns_cm *scm, struct m0_cob_domain *cdom, struct m0_poolmach *pm, const struct m0_fid *cob_fid)
struct m0_sns_cm_file_ctx * sag_fctx
M0_INTERNAL uint64_t m0_sns_cm_ag_size(const struct m0_pdclust_layout *pl)
static struct m0_sns_cm_cp scp
M0_INTERNAL enum m0_pdclust_unit_type m0_pdclust_unit_classify(const struct m0_pdclust_layout *pl, int unit)
static int _tgt_check_and_change(struct m0_sns_cm_ag *sag, struct m0_poolmach *pm, struct m0_pdclust_layout *pl, uint64_t data_unit, uint32_t old_tgt_dev, uint64_t *new_tgt_unit)
static bool rebalance_ag_is_relevant(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group)
M0_INTERNAL void m0_confc_close(struct m0_conf_obj *obj)
static int cob_to_proxy(struct m0_fid *cobfid, const struct m0_cm *cm, struct m0_poolmach *pm, struct m0_cm_proxy **pxy)
struct m0_pdclust_instance * sf_pi
static struct m0_sns_cm_file_ctx fctx
struct m0_cm_aggr_group sag_base
#define m0_tl_find(name, var, head,...)
static struct m0_addb2_source * s
static int rebalance_ag_in_cp_units(const struct m0_sns_cm *scm, const struct m0_cm_ag_id *id, struct m0_sns_cm_file_ctx *fctx, uint32_t *in_cp_nr, uint32_t *in_units_nr, struct m0_cm_proxy_in_count *pcount)
bool(* sch_is_cob_failed)(struct m0_poolmach *pm, uint32_t cob_index)
const struct m0_sns_cm_helpers * sc_helpers
static uint64_t rebalance_ag_unit_start(const struct m0_pdclust_layout *pl)