23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_CM 89 dst->ai_hi.u_hi =
src->ai_hi.u_hi;
90 dst->ai_hi.u_lo =
src->ai_hi.u_lo;
91 dst->ai_lo.u_hi =
src->ai_lo.u_hi;
92 dst->ai_lo.u_lo =
src->ai_lo.u_lo;
171 aggr_grps_in_tlink_init(ag);
172 aggr_grps_out_tlink_init(ag);
189 if (aggr_grps_in_tlink_is_in(ag)) {
190 aggr_grps_in_tlist_del(ag);
194 aggr_grps_in_tlink_fini(ag);
195 if (aggr_grps_out_tlink_is_in(ag)) {
196 aggr_grps_out_tlist_del(ag);
200 aggr_grps_out_tlink_fini(ag);
201 M0_POST(!aggr_grps_in_tlink_is_in(ag) &&
202 !aggr_grps_out_tlink_is_in(ag));
346 if (
rc == 0 ||
rc == -ENOBUFS)
360 " m0_cm_ag_in_hi(cm)=%p",
372 &grp_end_mark_id) == 0)
551 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL int m0_uint128_cmp(const struct m0_uint128 *u0, const struct m0_uint128 *u1)
M0_INTERNAL void m0_cm_ag_id_copy(struct m0_cm_ag_id *dst, const struct m0_cm_ag_id *src)
uint64_t cm_aggr_grps_in_nr
M0_INTERNAL struct m0_cm_aggr_group * m0_cm_ag_out_lo(const struct m0_cm *cm)
M0_INTERNAL void m0_cm_ag_unlock(struct m0_cm_aggr_group *ag)
int(* cmo_ag_alloc)(struct m0_cm *cm, const struct m0_cm_ag_id *id, bool has_incoming, struct m0_cm_aggr_group **out)
M0_INTERNAL void m0_cm_ag_get(struct m0_cm_aggr_group *ag)
M0_INTERNAL struct m0_cm_aggr_group * m0_cm_ag_out_hi(const struct m0_cm *cm)
M0_INTERNAL void m0_cm_ag_cp_del(struct m0_cm_aggr_group *ag, struct m0_cm_cp *cp)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
M0_INTERNAL bool m0_cm_ag_can_fini(struct m0_cm_aggr_group *ag)
#define ID_LOG(prefix, id)
void(* sa_cb)(struct m0_sm_group *grp, struct m0_sm_ast *)
const struct m0_cm_ops * cm_ops
M0_INTERNAL void m0_cm_aggr_group_add(struct m0_cm *cm, struct m0_cm_aggr_group *ag, bool has_incoming)
static struct m0_sm_group * grp
#define M0_LOG(level,...)
M0_INTERNAL void m0_tlist_add_before(const struct m0_tl_descr *d, void *obj, void *new)
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
void(* cago_fini)(struct m0_cm_aggr_group *ag)
static void __aggr_group_add(struct m0_cm_aggr_group *ag, const struct m0_tl_descr *descr, struct m0_tl *head)
M0_INTERNAL struct m0_cm_aggr_group * m0_cm_ag_in_hi(const struct m0_cm *cm)
struct m0_cm_ag_id cag_id
M0_BOB_DEFINE(static M0_UNUSED, &ag_bob, m0_cm_aggr_group)
struct m0_bob_type ag_bob
M0_INTERNAL void m0_cm_ag_in_interval(const struct m0_cm *cm, struct m0_cm_sw *in_interval)
int(* cmo_ag_next)(struct m0_cm *cm, const struct m0_cm_ag_id *id_curr, struct m0_cm_ag_id *id_next)
uint64_t cm_aggr_grps_out_nr
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
M0_INTERNAL bool m0_cm_ag_id_is_set(const struct m0_cm_ag_id *id)
uint64_t(* cago_local_cp_nr)(const struct m0_cm_aggr_group *ag)
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_uint128 id0[UPDATE_NR *DTM_NR]
static int head(struct m0_sm *mach)
static struct m0_sm_ast ast[NR]
M0_INTERNAL void m0_cm_ag_cp_add(struct m0_cm_aggr_group *ag, struct m0_cm_cp *cp)
M0_INTERNAL void m0_cm_complete_notify(struct m0_cm *cm)
static struct m0_cm_aggr_group * __aggr_group_locate(const struct m0_cm_ag_id *id, const struct m0_tl_descr *descr, struct m0_tl *head)
M0_INTERNAL bool m0_cm_ag_is_locked(struct m0_cm_aggr_group *ag)
M0_INTERNAL void m0_cm_ag_lock(struct m0_cm_aggr_group *ag)
#define M0_AMB(obj, ptr, field)
M0_INTERNAL int m0_cm_ag_id_cmp(const struct m0_cm_ag_id *id0, const struct m0_cm_ag_id *id1)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
M0_INTERNAL void m0_cm_ag_put(struct m0_cm_aggr_group *ag)
static void cm_ag_put(struct m0_cm_aggr_group *ag)
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_TL_DESCR_DEFINE(aggr_grps_in, "aggregation groups incoming", M0_INTERNAL, struct m0_cm_aggr_group, cag_cm_in_linkage, cag_magic, CM_AG_LINK_MAGIX, CM_AG_HEAD_MAGIX)
M0_INTERNAL struct m0_cm_aggr_group * m0_cm_ag_in_lo(const struct m0_cm *cm)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
struct m0_cm_ag_id cm_last_out_hi
struct m0_cm_aggr_group * c_ag
struct m0_sm_ast cag_fini_ast
static void cm_ag_get(struct m0_cm_aggr_group *ag)
M0_TL_DEFINE(aggr_grps_in, M0_INTERNAL, struct m0_cm_aggr_group)
struct m0_sm_group cm_sm_group
#define ID_INCOMING_LOG(prefix, id, has_incoming)
struct m0_tl cm_aggr_grps_out
M0_INTERNAL void m0_cm_aggr_group_fini(struct m0_cm_aggr_group *ag)
struct m0_cm_ag_store_data s_data
const struct m0_cm_aggr_group_ops * cag_ops
M0_INTERNAL void m0_cm_ag_out_interval(const struct m0_cm *cm, struct m0_cm_sw *out_interval)
M0_INTERNAL int m0_cm_ag_advance(struct m0_cm *cm)
M0_INTERNAL bool m0_cm_aggr_group_tlists_are_empty(struct m0_cm *cm)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_cm_ag_fini_post(struct m0_cm_aggr_group *ag)
struct m0_mutex cag_mutex
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)
#define m0_tlist_for(descr, head, obj)
static void _fini_ast_cb(struct m0_sm_group *grp, struct m0_sm_ast *ast)
bool(* cago_ag_can_fini)(const struct m0_cm_aggr_group *ag)
struct m0_tl cm_aggr_grps_in
M0_INTERNAL bool m0_cm_is_locked(const struct m0_cm *cm)
M0_INTERNAL void m0_cm_ag_cp_add_locked(struct m0_cm_aggr_group *ag, struct m0_cm_cp *cp)
struct m0_pdclust_src_addr src
M0_INTERNAL void m0_tlist_add_tail(const struct m0_tl_descr *d, struct m0_tl *list, void *obj)
M0_INTERNAL void m0_cm_aggr_group_fini_and_progress(struct m0_cm_aggr_group *ag)
struct m0_cm_ag_store cm_ag_store
struct m0_cm_ag_id cm_sw_last_updated_hi