23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_SNSCM 54 uint64_t tgt_cob_index,
55 uint64_t failed_unit_idx,
56 uint64_t data_seg_nr);
71 uint64_t cp_data_seg_nr;
89 return nr_in_bufs + nr_acc_bufs;
106 nbuf_head = cp_data_buf_tlist_head(&cp->
c_buffers);
120 uint64_t local_cp_nr;
182 uint32_t nr_incoming_freed;
199 uint32_t unused_cps = 0;
201 uint32_t nr_rem_bufs;
225 nr_bufs = unused_cps * nr_cp_bufs + nr_rem_bufs;
259 uint32_t inactive_acc_nr = 0;
277 uint32_t inactive_accs = 0;
281 return ag->
cag_ref == inactive_accs;
300 uint64_t fdev, uint64_t funit)
306 uint32_t tgt_unit_prev;
315 group, funit, &tgt_unit, &tgt_unit_prev);
333 struct m0_fid *tgt_cobfid;
340 uint64_t data_unit_id_out;
353 for (
i = 0;
i < fmap->
b_nr; ++
i) {
367 i, &data_unit_id_out);
377 if (data_unit_id_out ==
i)
380 data_unit_id_out =
i;
402 if (data_unit_id_out ==
i) {
502 if (
rc != 0 &&
rc != -ENOBUFS)
532 uint64_t cp_data_seg_nr;
566 uint64_t xform_cp_nr = 0;
573 return xform_cp_nr >= nr_cps;
577 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL uint64_t m0_sns_cm_ag_nr_data_units(const struct m0_pdclust_layout *pl)
M0_INTERNAL uint64_t m0_sns_cm_ag_local_cp_nr(const struct m0_cm_aggr_group *ag)
static struct m0_dtm_local_remote local
M0_INTERNAL void m0_parity_math_fini(struct m0_parity_math *math)
M0_INTERNAL bool m0_pdclust_is_replicated(struct m0_pdclust_layout *play)
#define M0_ALLOC_ARR(arr, nr)
M0_INTERNAL void agid2fid(const struct m0_cm_ag_id *id, struct m0_fid *fid)
M0_INTERNAL int m0_sns_cm_repair_ag_setup(struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl)
struct m0_parity_math rag_math
M0_INTERNAL void m0_bitmap_fini(struct m0_bitmap *map)
struct m0_bitmap c_xform_cp_indices
struct m0_bufvec nb_buffer
static int incr_recover_init(struct m0_sns_cm_repair_ag *rag, struct m0_pdclust_layout *pl)
struct m0_bitmap sag_fmap
M0_INTERNAL struct m0_sns_cm * cm2sns(struct m0_cm *cm)
static void incr_recover_fini(struct m0_sns_cm_repair_ag *rag)
struct m0_pool_version * pm_pver
#define M0_LOG(level,...)
static const struct m0_cm_aggr_group_ops sns_cm_repair_ag_ops
static int incr_recover_failure_register(struct m0_sns_cm_repair_ag *rag)
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)
uint32_t rag_acc_inuse_nr
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)
M0_INTERNAL int m0_sns_cm_acc_cp_setup(struct m0_sns_cm_cp *scp, struct m0_fid *tgt_cobfid, uint64_t tgt_cob_index, uint64_t failed_unit_idx, uint64_t data_seg_nr)
static struct m0_sns_cm * scm
M0_INTERNAL int repair_cp_bufvec_split(struct m0_cm_cp *cp)
M0_INTERNAL void m0_sns_cm_ag_fini(struct m0_sns_cm_ag *sag)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_parity_units(const struct m0_pdclust_layout *pl)
M0_INTERNAL int m0_poolmach_device_state(struct m0_poolmach *pm, uint32_t device_index, enum m0_pool_nd_state *state_out)
struct m0_sns_cm_buf_pool sc_ibp
#define container_of(ptr, type, member)
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 void m0_sns_ir_fini(struct m0_sns_ir *ir)
static uint32_t repair_ag_inactive_acc_nr(struct m0_cm_aggr_group *ag)
M0_INTERNAL uint64_t m0_sns_cm_ag_unit2cobindex(struct m0_sns_cm_ag *sag, uint64_t unit)
M0_INTERNAL int m0_sns_ir_failure_register(struct m0_bufvec *recov_addr, uint32_t failed_index, struct m0_sns_ir *ir)
M0_INTERNAL int m0_sns_ir_init(const struct m0_parity_math *math, uint32_t local_nr, struct m0_sns_ir *ir)
static void acc_check_fini(struct m0_sns_cm_repair_ag *rag)
M0_INTERNAL uint64_t agid2group(const struct m0_cm_ag_id *id)
static struct m0_sns_cm_ag * sag
return M0_ERR(-EOPNOTSUPP)
uint64_t fc_tgt_cob_index
M0_INTERNAL bool m0_sns_cm_ag_is_frozen_on(struct m0_cm_aggr_group *ag, struct m0_cm_proxy *pxy)
M0_INTERNAL uint32_t m0_sns_cm_device_index_get(uint64_t group, uint64_t unit_number, struct m0_sns_cm_file_ctx *fctx)
struct m0_sns_cm_ag rag_base
M0_INTERNAL size_t m0_sns_cm_ag_unrepaired_units(const struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group, struct m0_bitmap *fmap_out)
static int repair_ag_failure_ctxs_setup(struct m0_sns_cm_repair_ag *rag, const struct m0_bitmap *fmap, struct m0_pdclust_layout *pl)
M0_INTERNAL bool m0_sns_cm_ag_has_incoming_from(struct m0_cm_aggr_group *ag, struct m0_cm_proxy *proxy)
struct m0_fid fc_tgt_cobfid
M0_INTERNAL uint64_t m0_sns_cm_cp_buf_nr(struct m0_net_buffer_pool *bp, uint64_t data_seg_nr)
const struct m0_cm_cp_ops * c_ops
M0_INTERNAL int m0_sns_cm_repair_ag_alloc(struct m0_cm *cm, const struct m0_cm_ag_id *id, bool has_incoming, struct m0_cm_aggr_group **out)
M0_INTERNAL int m0_sns_ir_mat_compute(struct m0_sns_ir *ir)
M0_INTERNAL struct m0_pdclust_layout * m0_layout_to_pdl(const struct m0_layout *l)
M0_INTERNAL int m0_parity_math_init(struct m0_parity_math *math, uint32_t data_count, uint32_t parity_count)
struct m0_pdclust_instance pi
struct m0_sns_cm_cp fc_tgt_acc_cp
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)
struct m0_sm_ast * sa_next
M0_INTERNAL void m0_sns_cm_fctx_lock(struct m0_sns_cm_file_ctx *fctx)
uint32_t sag_incoming_cp_nr
M0_INTERNAL int m0_cm_cp_bufvec_merge(struct m0_cm_cp *cp)
struct m0_sm_ast cag_fini_ast
uint64_t cag_transformed_cp_nr
M0_INTERNAL struct m0_cm * snsag2cm(const struct m0_sns_cm_ag *sag)
static uint64_t repair_ag_target_unit(struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t fdev, uint64_t funit)
M0_INTERNAL bool m0_sns_cm_ag_acc_is_full_with(const struct m0_cm_cp *acc, uint64_t nr_cps)
struct m0_sns_cm_file_ctx * sag_fctx
struct m0_sns_cm_repair_ag_failure_ctx * rag_fc
static void repair_ag_fini(struct m0_cm_aggr_group *ag)
M0_INTERNAL int m0_sns_cm_ag_init(struct m0_sns_cm_ag *sag, struct m0_cm *cm, const struct m0_cm_ag_id *id, const struct m0_cm_aggr_group_ops *ag_ops, bool has_incoming)
struct m0_net_buffer_pool sb_bp
M0_INTERNAL void m0_cm_aggr_group_fini(struct m0_cm_aggr_group *ag)
M0_INTERNAL uint64_t m0_sns_cm_data_seg_nr(struct m0_sns_cm *scm, struct m0_pdclust_layout *pl)
uint32_t sag_local_tgts_nr
M0_INTERNAL uint64_t m0_sns_cm_ag_size(const struct m0_pdclust_layout *pl)
static struct m0_sns_cm_cp scp
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL int64_t m0_sns_cm_repair_ag_inbufs(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, const struct m0_cm_ag_id *id)
M0_INTERNAL bool m0_bitmap_get(const struct m0_bitmap *map, size_t idx)
M0_INTERNAL enum m0_pdclust_unit_type m0_pdclust_unit_classify(const struct m0_pdclust_layout *pl, int unit)
M0_INTERNAL bool m0_sns_cm_unit_is_spare(struct m0_sns_cm_file_ctx *fctx, uint64_t group_nr, uint64_t spare_nr)
M0_INTERNAL void m0_sns_cm_cancel_reservation(struct m0_sns_cm *scm, size_t nr_bufs)
void(* co_free)(struct m0_cm_cp *cp)
M0_INTERNAL void m0_sns_cm_cp_buf_release(struct m0_cm_cp *cp)
uint32_t sag_cp_created_nr
M0_INTERNAL int64_t m0_sns_cm_incoming_reserve_bufs(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
struct m0_pdclust_instance * sf_pi
static struct m0_sns_cm_file_ctx fctx
static struct m0_sns_cm_repair_ag rag
struct m0_cm_aggr_group sag_base
bool(* cago_ag_can_fini)(const struct m0_cm_aggr_group *ag)
M0_INTERNAL bool m0_cm_is_locked(const struct m0_cm *cm)
static bool repair_ag_can_fini(const struct m0_cm_aggr_group *ag)
M0_INTERNAL struct m0_sns_cm_repair_ag * sag2repairag(const struct m0_sns_cm_ag *sag)
static uint32_t ag_in_remaining_bufs(struct m0_sns_cm_repair_ag *rag)
M0_INTERNAL struct m0_sns_cm_ag * ag2snsag(const struct m0_cm_aggr_group *ag)
M0_INTERNAL void m0_sns_cm_acc_cp_init(struct m0_sns_cm_cp *scp, struct m0_sns_cm_ag *ag)