23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_SNSCM 62 .sd_name =
"ag iter fid lock",
67 .sd_name =
"ag iter fid next",
72 .sd_name =
"ag iter fid attr",
78 .sd_name =
"ag iter group next",
83 .sd_name =
"ag iter fini",
111 struct m0_fid fid_out = {0, 0};
148 for (
i =
group;
i <= group_last; ++
i) {
169 if (M0_IN(
rc, (-ENOMEM, -ENOBUFS)))
171 else if (M0_IN(
rc, (-ENOENT, -ESHUTDOWN))) {
243 if (pver_id ==
NULL) {
293 &fid_curr, &
fid, &nsrec);
357 return M0_RC(-ENODATA);
417 return id->ai_lo.u_lo;
503 " pst_nr_failures: %u pst_max_device_failures: %u",
588 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL uint64_t m0_sns_cm_ag_nr_global_units(const struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl)
M0_INTERNAL void m0_sns_cm_pver_dirty_set(struct m0_pool_version *pver)
struct m0_poolmach_state * pm_state
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 int ai_fid_lock(struct m0_sns_cm_ag_iter *ai)
static struct m0_fid gob_fid
int(* cmo_get_space_for)(struct m0_cm *cm, const struct m0_cm_ag_id *id, size_t *count)
M0_INTERNAL uint64_t m0_sns_cm_ag_local_cp_nr(const struct m0_cm_aggr_group *ag)
M0_INTERNAL int m0_bitmap_init(struct m0_bitmap *map, size_t nr)
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 bool m0_sns_cm_fid_is_valid(const struct m0_sns_cm *snscm, const struct m0_fid *fid)
M0_INTERNAL void agid2fid(const struct m0_cm_ag_id *id, struct m0_fid *fid)
M0_INTERNAL void m0_bitmap_fini(struct m0_bitmap *map)
static const struct m0_sm_conf ai_sm_conf
static int __file_lock(struct m0_sns_cm *scm, const struct m0_fid *fid, struct m0_sns_cm_file_ctx **fctx)
struct m0_bitmap sag_fmap
M0_INTERNAL struct m0_sns_cm * cm2sns(struct m0_cm *cm)
const struct m0_cm_ops * cm_ops
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)
static struct m0_sns_cm * ai2sns(struct m0_sns_cm_ag_iter *ai)
struct m0_pool_version * pv
struct m0_poolmach pv_mach
#define M0_LOG(level,...)
M0_INTERNAL uint64_t m0_sns_cm_file_data_units(struct m0_sns_cm_file_ctx *fctx)
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(* ai_action[])(struct m0_sns_cm_ag_iter *ai)
M0_INTERNAL bool m0_sns_cm_file_unit_is_EOF(struct m0_pdclust_layout *pl, uint64_t nr_max_data_units, uint64_t group, uint32_t unit)
static enum ag_iter_state ai_state(struct m0_sns_cm_ag_iter *ai)
struct m0_layout * sf_layout
struct m0_cm_ag_id cag_id
static struct m0_sns_cm * scm
M0_INTERNAL void m0_sns_cm_ag_fini(struct m0_sns_cm_ag *sag)
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)
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
static bool ag_id_is_in(const struct m0_cm_ag_id *id, const struct m0_cm_sw *interval)
M0_INTERNAL int m0_fid_cmp(const struct m0_fid *fid0, const struct m0_fid *fid1)
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 void m0_cm_aggr_group_init(struct m0_cm_aggr_group *ag, struct m0_cm *cm, const struct m0_cm_ag_id *id, bool has_incoming, const struct m0_cm_aggr_group_ops *ag_ops)
static struct m0_sm_state_descr ai_sd[AIS_NR]
uint64_t cag_cp_global_nr
static int ai_group_next(struct m0_sns_cm_ag_iter *ai)
M0_INTERNAL uint64_t agid2group(const struct m0_cm_ag_id *id)
M0_INTERNAL struct m0_sns_cm_file_ctx * m0_sns_cm_fctx_get(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
M0_INTERNAL void m0_sns_cm_ag_iter_fini(struct m0_sns_cm_ag_iter *ai)
static struct m0_sns_cm_ag * sag
static struct m0_cm_ag_id ag_id
struct m0_sns_cm_file_ctx * ai_fctx
M0_INTERNAL void m0_fid_set(struct m0_fid *fid, uint64_t container, uint64_t key)
#define M0_ERR_INFO(rc, fmt,...)
return M0_ERR(-EOPNOTSUPP)
struct m0_mutex sc_file_ctx_mutex
M0_INTERNAL bool m0_sns_cm_ag_is_frozen_on(struct m0_cm_aggr_group *ag, struct m0_cm_proxy *pxy)
struct m0_sns_cm * sf_scm
M0_INTERNAL const struct m0_fid M0_MDSERVICE_SLASH_FID
M0_INTERNAL bool m0_cm_ag_is_locked(struct m0_cm_aggr_group *ag)
struct m0_cm_proxy_in_count sag_proxy_in_count
M0_INTERNAL int m0_sns_cm_file_lock_wait(struct m0_sns_cm_file_ctx *fctx, struct m0_fom *fom)
enum m0_proxy_state px_status
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)
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)
M0_INTERNAL bool m0_sns_cm_ag_has_incoming_from(struct m0_cm_aggr_group *ag, struct m0_cm_proxy *proxy)
void m0_sm_state_set(struct m0_sm *mach, int state)
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_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)
struct m0_sns_cm_ag_iter sc_ag_it
M0_INTERNAL struct m0_pdclust_layout * m0_layout_to_pdl(const struct m0_layout *l)
M0_INTERNAL uint32_t m0_pdclust_K(const struct m0_pdclust_layout *pl)
uint32_t sag_incoming_cp_nr
M0_INTERNAL int m0_sns_cm_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)
struct m0_cob_domain * sc_cob_dom
static bool _is_fid_valid(struct m0_sns_cm_ag_iter *ai, struct m0_fid *fid)
M0_INTERNAL void m0_cm_proxy_in_count_free(struct m0_cm_proxy_in_count *pcount)
M0_INTERNAL struct m0_reqh * m0_sns_cm2reqh(const struct m0_sns_cm *snscm)
M0_INTERNAL struct m0_cm * snsag2cm(const struct m0_sns_cm_ag *sag)
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_cm_sw px_out_interval
struct m0_sns_cm_file_ctx * sag_fctx
static uint8_t fail[DATA_UNIT_COUNT_MAX+PARITY_UNIT_COUNT_MAX]
bool m0_cm_cp_pump_is_complete(const struct m0_cm_cp_pump *cp_pump)
bool(* cago_has_incoming_from)(struct m0_cm_aggr_group *ag, struct m0_cm_proxy *proxy)
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_cm_sw_update cm_sw_update
static void ai_state_set(struct m0_sns_cm_ag_iter *ai, int state)
#define M0_FI_ENABLED(tag)
static int ai_fid_next(struct m0_sns_cm_ag_iter *ai)
M0_INTERNAL int m0_cob_ns_rec_of(struct m0_be_btree *cob_namespace, const struct m0_fid *key_gfid, struct m0_fid *next_gfid, struct m0_cob_nsrec **nsrec)
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)
const struct m0_cm_aggr_group_ops * cag_ops
M0_INTERNAL int m0_sns_cm_ag__next(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id_curr, struct m0_cm_ag_id *id_next)
M0_INTERNAL int m0_cm_proxy_in_count_alloc(struct m0_cm_proxy_in_count *pcount, uint32_t nr_proxies)
M0_INTERNAL int m0_sns_cm_file_attr_and_layout(struct m0_sns_cm_file_ctx *fctx)
struct m0_pools_common * rh_pools
uint32_t pst_max_device_failures
M0_INTERNAL bool m0_sns_cm_ag_has_data(struct m0_sns_cm_file_ctx *fctx, uint64_t group)
uint32_t sag_incoming_units_nr
M0_INTERNAL void m0_sns_cm_cancel_reservation(struct m0_sns_cm *scm, size_t nr_bufs)
M0_INTERNAL int m0_sns_cm_fctx_state_get(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL void m0_sns_cm_print_status(struct m0_sns_cm *scm)
uint32_t sag_cp_created_nr
struct m0_cm_cp_pump cm_cp_pump
struct m0_poolmach * ai_pm
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)
static int ai_fid_attr(struct m0_sns_cm_ag_iter *ai)
struct m0_cm_ag_id ai_id_next
struct m0_cm_aggr_group sag_base
static int ai_pm_set(struct m0_sns_cm_ag_iter *ai, struct m0_fid *pv_id)
M0_INTERNAL bool m0_cm_is_locked(const struct m0_cm *cm)
M0_INTERNAL struct m0_sns_cm_ag * ag2snsag(const struct m0_cm_aggr_group *ag)
M0_INTERNAL void m0_sns_cm_fctx_put(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
M0_INTERNAL void m0_cm_aggr_group_fini_and_progress(struct m0_cm_aggr_group *ag)
M0_INTERNAL const struct m0_fid M0_COB_ROOT_FID
struct m0_cm_ag_id ai_id_curr
M0_INTERNAL int m0_sns_cm_ag_iter_init(struct m0_sns_cm_ag_iter *ai)
struct m0_be_btree cd_namespace
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)