23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_SNSCM 57 .
bt_name =
"sns cm data iterator",
129 return it->si_sm.sm_state;
161 return it !=
NULL && m0_sns_cm_iter_bob_check(
it) &&
164 it->si_fc.ifc_fctx->sf_layout !=
NULL,
174 struct m0_fid *cob_fid_out)
232 it->si_fc.ifc_sa.sa_group = 0;
234 it->si_fc.ifc_sa.sa_unit = 0;
290 fid = &
it->si_fc.ifc_gfid;
313 fctx =
it->si_fc.ifc_fctx;
356 return M0_RC(-ENODATA);
454 if (
rc != 0 && has_incoming)
459 if (*ag !=
NULL && has_incoming) {
460 if ((*ag)->cag_cp_local_nr > 0 &&
461 !aggr_grps_out_tlink_is_in(*ag))
484 bool has_incoming =
false;
508 if (has_incoming || nrlu > 0) {
525 if (M0_IN(
rc, (-ENOENT, -ESHUTDOWN))) {
543 it->si_fc.ifc_fctx =
NULL;
576 fctx =
it->si_fc.ifc_fctx;
622 uint64_t stob_offset;
623 uint64_t cp_data_seg_nr;
662 ag_cp_idx, &ag_cp_idx);
668 cp_data_seg_nr, ~0, ag_cp_idx);
704 it->si_cp->sc_is_hole_eof =
false;
727 it->si_cp->sc_is_hole_eof =
true;
779 "Got %s cmd: returning -ENODATA",
786 return M0_RC(-ENODATA);
796 if (M0_IN(
rc, (-ENOBUFS, -ENOSPC))) {
808 .sd_name =
"iter init",
813 .sd_name =
"iter idle",
818 .sd_name =
"COB next",
823 .sd_name =
"group next",
829 .sd_name =
"FID next",
835 .sd_name =
"File lock wait",
840 .sd_name =
"File lock wait",
845 .sd_name =
"File attr and layout fetch",
850 .sd_name =
"cp setup",
855 .sd_name =
"ag setup",
860 .sd_name =
"cm iter fini",
880 m0_sns_cm_iter_bob_init(
it);
881 it->si_total_files = 0;
916 if (
it->si_cns_it.cni_cdom !=
NULL)
929 m0_sns_cm_iter_bob_fini(
it);
933 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL void m0_sns_cm_pver_dirty_set(struct m0_pool_version *pver)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_data_units(const struct m0_pdclust_layout *pl)
M0_INTERNAL bool m0_sns_cm_ag_is_relevant(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, const struct m0_cm_ag_id *id)
static const struct m0_bob_type iter_bob
static int iter_ag_setup(struct m0_sns_cm_iter *it)
int(* cmo_get_space_for)(struct m0_cm *cm, const struct m0_cm_ag_id *id, size_t *count)
M0_INTERNAL void m0_cm_ag_get(struct m0_cm_aggr_group *ag)
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 bool m0_sns_cm_pver_is_dirty(struct m0_pool_version *pver)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
M0_INTERNAL void m0_fid_gob_make(struct m0_fid *gob_fid, uint32_t container, uint64_t key)
M0_INTERNAL void agid2fid(const struct m0_cm_ag_id *id, struct m0_fid *fid)
struct m0_sns_cm_buf_pool sc_obp
static bool __has_incoming(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group)
M0_INTERNAL struct m0_sns_cm * it2sns(struct m0_sns_cm_iter *it)
M0_INTERNAL struct m0_sns_cm * cm2sns(struct m0_cm *cm)
struct m0_fid ifc_cob_fid
static int iter_fid_attr_layout(struct m0_sns_cm_iter *it)
M0_INTERNAL int m0_cob_ns_iter_next(struct m0_cob_fid_ns_iter *iter, struct m0_fid *gfid, struct m0_cob_nsrec **nsrec)
struct m0_sns_cm_file_ctx * ifc_fctx
struct m0_poolmach * ifc_pm
const struct m0_cm_ops * cm_ops
M0_INTERNAL void m0_sns_cm_iter_stop(struct m0_sns_cm_iter *it)
struct m0_pool_version * pm_pver
M0_INTERNAL struct m0_pool_version * m0_pool_version_find(struct m0_pools_common *pc, const struct m0_fid *id)
M0_INTERNAL void m0_cm_aggr_group_add(struct m0_cm *cm, struct m0_cm_aggr_group *ag, bool has_incoming)
struct m0_pool_version * pv
struct m0_poolmach pv_mach
#define M0_LOG(level,...)
M0_INTERNAL void m0_sns_cm_ag_agid_setup(const struct m0_fid *gob_fid, uint64_t group, struct m0_cm_ag_id *agid)
static int __group_next(struct m0_sns_cm_iter *it)
struct m0_pdclust_src_addr ifc_sa
M0_INTERNAL void m0_cob_ns_iter_fini(struct m0_cob_fid_ns_iter *iter)
static bool __group_skip(struct m0_sns_cm_iter *it, uint64_t group)
struct m0_layout * sf_layout
M0_INTERNAL void m0_sns_cm_fctx_unlock(struct m0_sns_cm_file_ctx *fctx)
static struct m0_sns_cm * scm
static struct m0_be_emap_cursor it
M0_INTERNAL int m0_sns_cm_file_lock(struct m0_sns_cm *scm, const struct m0_fid *fid, struct m0_sns_cm_file_ctx **out)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_parity_units(const struct m0_pdclust_layout *pl)
struct m0_sns_cm_buf_pool sc_ibp
#define container_of(ptr, type, member)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
struct m0_poolmach * sf_pm
M0_INTERNAL void m0_sns_cm_file_attr_and_layout_wait(struct m0_sns_cm_file_ctx *fctx, struct m0_fom *fom)
M0_INTERNAL bool m0_cm_ag_id_is_set(const struct m0_cm_ag_id *id)
M0_INTERNAL bool m0_fid_is_set(const struct m0_fid *fid)
M0_INTERNAL int m0_sns_cm_iter_init(struct m0_sns_cm_iter *it)
M0_INTERNAL int iter_idle(struct m0_sns_cm_iter *it)
M0_INTERNAL uint64_t agid2group(const struct m0_cm_ag_id *id)
M0_INTERNAL void m0_cm_ag_cp_add(struct m0_cm_aggr_group *ag, struct m0_cm_cp *cp)
static bool unit_has_data(struct m0_sns_cm *scm, uint32_t unit)
static struct m0_sns_cm_ag * sag
struct m0_mutex sc_file_ctx_mutex
static int iter_group_next(struct m0_sns_cm_iter *it)
M0_INTERNAL const struct m0_fid M0_MDSERVICE_SLASH_FID
static enum cm_data_iter_phase iter_phase(const struct m0_sns_cm_iter *it)
M0_INTERNAL int m0_sns_cm_file_lock_wait(struct m0_sns_cm_file_ctx *fctx, struct m0_fom *fom)
M0_INTERNAL int m0_cm_ag_id_cmp(const struct m0_cm_ag_id *id0, const struct m0_cm_ag_id *id1)
M0_INTERNAL void m0_sns_cm_file_unlock(struct m0_sns_cm *scm, struct m0_fid *fid)
static int iter_fid_next(struct m0_sns_cm_iter *it)
bool ifc_cob_is_spare_unit
void m0_sm_state_set(struct m0_sm *mach, int state)
M0_INTERNAL int __fid_next(struct m0_sns_cm_iter *it, struct m0_fid *fid_next)
M0_INTERNAL void m0_cm_ag_put(struct m0_cm_aggr_group *ag)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_local_units(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group)
m0_sns_cm_local_unit_type
M0_INTERNAL int m0_cob_ns_iter_init(struct m0_cob_fid_ns_iter *iter, struct m0_fid *gfid, struct m0_cob_domain *cdom)
static struct m0_fid cob_fid
static struct m0_sm_state_descr cm_iter_sd[ITPH_NR]
M0_INTERNAL int m0_sns_cm_cp_setup(struct m0_sns_cm_cp *scp, const struct m0_fid *cob_fid, uint64_t stob_offset, uint64_t data_seg_nr, uint64_t failed_unit_index, uint64_t ag_cp_idx)
M0_INTERNAL struct m0_cm_aggr_group * m0_cm_aggr_group_locate(struct m0_cm *cm, const struct m0_cm_ag_id *id, bool has_incoming)
M0_INTERNAL struct m0_pdclust_layout * m0_layout_to_pdl(const struct m0_layout *l)
static int iter_fid_lock_wait(struct m0_sns_cm_iter *it)
M0_INTERNAL bool m0_sns_cm_is_cob_repaired(struct m0_poolmach *pm, uint32_t cob_index)
static void unit_to_cobfid(struct m0_sns_cm_iter_file_ctx *ifc, struct m0_fid *cob_fid_out)
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_cm_aggr_group * c_ag
M0_INTERNAL void m0_sns_cm_fctx_lock(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL struct m0_sns_cm_cp * cp2snscp(const struct m0_cm_cp *cp)
static int iter_cob_next(struct m0_sns_cm_iter *it)
struct m0_cob_domain * sc_cob_dom
struct m0_cm_ag_id cm_last_processed_out
M0_INTERNAL struct m0_reqh * m0_sns_cm2reqh(const struct m0_sns_cm *snscm)
M0_INTERNAL int m0_sns_cm_iter_next(struct m0_cm *cm, struct m0_cm_cp *cp)
M0_INTERNAL enum m0_sns_cm_local_unit_type m0_sns_cm_local_unit_type_get(struct m0_sns_cm_file_ctx *fctx, uint64_t group, uint64_t unit)
struct m0_sm_group cm_sm_group
M0_INTERNAL void m0_sns_cm_buf_wait(struct m0_sns_cm_buf_pool *sbp, struct m0_fom *fom)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
struct m0_sns_cm_iter_file_ctx si_fc
#define M0_MAGIX_OFFSET(type, field)
static int __file_context_init(struct m0_sns_cm_iter *it)
#define M0_FI_ENABLED(tag)
M0_INTERNAL uint64_t m0_sns_cm_data_seg_nr(struct m0_sns_cm *scm, struct m0_pdclust_layout *pl)
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
M0_INTERNAL uint64_t m0_sns_cm_ag_size(const struct m0_pdclust_layout *pl)
static int iter_fid_lock(struct m0_sns_cm_iter *it)
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)
M0_INTERNAL int m0_sns_cm_file_attr_and_layout(struct m0_sns_cm_file_ctx *fctx)
struct m0_pools_common * rh_pools
M0_INTERNAL bool m0_sns_cm_unit_is_spare(struct m0_sns_cm_file_ctx *fctx, uint64_t group_nr, uint64_t spare_nr)
static int group__next(struct m0_sns_cm_iter *it)
M0_INTERNAL void m0_sns_cm_cancel_reservation(struct m0_sns_cm *scm, size_t nr_bufs)
M0_INTERNAL int m0_sns_cm_iter_start(struct m0_sns_cm_iter *it)
uint32_t sag_cp_created_nr
struct m0_cm_cp_pump cm_cp_pump
static bool iter_layout_invariant(enum cm_data_iter_phase phase, const struct m0_sns_cm_iter_file_ctx *ifc)
struct m0_pdclust_instance * sf_pi
static struct m0_sns_cm_file_ctx fctx
M0_INTERNAL int m0_cm_aggr_group_alloc(struct m0_cm *cm, const struct m0_cm_ag_id *id, bool has_incoming, struct m0_cm_aggr_group **out)
struct m0_sns_cm_iter sc_it
struct m0_pdclust_tgt_addr ifc_ta
M0_INTERNAL void m0_layout_put(struct m0_layout *l)
static void iter_phase_set(struct m0_sns_cm_iter *it, int phase)
static int iter_cp_setup(struct m0_sns_cm_iter *it)
static const struct m0_sm_conf cm_iter_sm_conf
int(* sch_ag_setup)(struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl)
static bool iter_invariant(const struct m0_sns_cm_iter *it)
static int __group_alloc(struct m0_sns_cm *scm, struct m0_fid *gfid, uint64_t group, struct m0_pdclust_layout *pl, bool has_incoming, struct m0_cm_aggr_group **ag)
M0_BOB_DEFINE(static, &iter_bob, m0_sns_cm_iter)
bool(* sch_is_cob_failed)(struct m0_poolmach *pm, uint32_t cob_index)
M0_INTERNAL struct m0_sns_cm_ag * ag2snsag(const struct m0_cm_aggr_group *ag)
const struct m0_sns_cm_helpers * sc_helpers
static int(* iter_action[])(struct m0_sns_cm_iter *it)
M0_INTERNAL uint32_t m0_pdclust_P(const struct m0_pdclust_layout *pl)
M0_INTERNAL uint64_t m0_pdclust_unit_size(const struct m0_pdclust_layout *pl)
M0_INTERNAL const struct m0_fid M0_COB_ROOT_FID
M0_INTERNAL void m0_sns_cm_iter_fini(struct m0_sns_cm_iter *it)
struct m0_cm_ag_id cm_sw_last_updated_hi
#define M0_IMPOSSIBLE(fmt,...)
M0_INTERNAL void m0_sns_cm_reserve_space(struct m0_sns_cm *scm, size_t nr_bufs)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)