23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_FOP 236 return runq_tlist_contains(&
fom->fo_loc->fl_runq,
fom);
241 return wail_tlist_contains(&
fom->fo_loc->fl_wail,
fom);
260 _0C(
dom->fd_localities_nr <= cpu_max) &&
278 fom->fo_loc == loc))) &&
280 fom->fo_loc == loc)));
285 return fom->fo_service->rs_reqh;
290 return fom->fo_sm_state.sm_state;
344 uint32_t fop_opcode = 0;
380 "HUNG_FOM_NOTIFY diff_in_sec="TIME_F" " 381 "fom=%p fop=%p fop_opcode=%u fom_phase=\"%s\" " 383 "remote_machine_ep=%s",
386 (rpc_mc ==
NULL) ?
"NOT_AVAILABLE" :
392 if (
fom->fo_ops->fo_hung_notify !=
NULL)
393 fom->fo_ops->fo_hung_notify(
fom);
451 fom->fo_transitions,
fom->fo_sm_phase.sm_state);
461 uint64_t sender_id = 0;
462 uint64_t item_sm_id = 0;
463 uint64_t phase_sm_id = 0;
464 uint64_t state_sm_id = 0;
467 fom->fo_sm_phase.sm_addb2_stats = &phase_stats;
469 fom->fo_sm_state.sm_addb2_stats =
477 sender_id =
req->ri_session->s_conn->c_sender_id;
484 FID_P(&
fom->fo_service->rs_service_fid),
492 fom->fo_rep_fop->f_item.ri_type->rit_opcode : 0,
497 if (
fom->fo_ops->fo_addb2_descr !=
NULL)
498 fom->fo_ops->fo_addb2_descr(
fom);
548 thr =
fom->fo_thread;
588 thr =
fom->fo_thread;
632 loc_idx =
fom->fo_ops->fo_home_locality(
fom) %
dom->fd_localities_nr;
634 fom->fo_loc =
dom->fd_localities[loc_idx];
635 fom->fo_loc_idx = loc_idx;
793 fom->fo_log[
fom->fo_transitions %
803 fom->fo_transitions++;
815 fom->fo_ops->fo_fini(
fom);
831 while ((cb =
fom->fo_pending) !=
NULL) {
972 thr_tlink_del_fini(th);
991 thr_tlink_init_at_tail(thr, &loc->
fl_threads);
1037 runq_tlist_fini(&loc->
fl_runq);
1039 wail_tlist_fini(&loc->
fl_wail);
1082 runq_tlist_init(&loc->
fl_runq);
1084 wail_tlist_init(&loc->
fl_wail);
1155 for (
i = 0;
i < cores->
b_nr &&
i < onln_cpu_map->
b_nr; ++
i)
1168 dom->fd_ops->fdo_time_is_out(
dom,
fom));
1170 dom->fd_ops->fdo_time_is_out(
dom,
fom));
1203 .co_queue_max = (cpu_nr + 1 ) / 2 *
1205 .co_pool_min = cpu_nr,
1206 .co_pool_max = cpu_nr
1210 if (
dom->fd_localities !=
NULL) {
1211 dom->fd_localities_nr = cpu_nr;
1212 for (
i = 0;
i < cpu_nr; ++
i) {
1219 dom->fd_localities[
i] = loc;
1223 result =
M0_ERR(-ENOMEM);
1230 for (
i = 0;
i < cpu_nr; ++
i) {
1231 loc =
dom->fd_localities[
i];
1244 result =
M0_ERR(-ENOMEM);
1261 if (
dom->fd_localities !=
NULL) {
1262 for (
i =
dom->fd_localities_nr - 1;
i >= 0; --
i) {
1267 for (
i = 0;
i <
dom->fd_localities_nr;
i++)
1271 if (
dom->fd_addb2_sys !=
NULL)
1292 dom->fd_localities[
i]->fl_foms == 0);
1297 unsigned key =
fom->fo_service->rs_fom_key;
1311 unsigned key =
fom->fo_service->rs_fom_key;
1338 runq_tlink_fini(
fom);
1383 fom->fo_transitions = 0;
1384 fom->fo_local =
false;
1386 runq_tlink_init(
fom);
1450 fom->fo_pending = cb;
1609 type->ft_conf = *sm;
1611 type->ft_rstype = svc_type;
1627 .sd_name =
"Running",
1632 .sd_name =
"Waiting",
1637 .sd_name =
"Finished",
1681 fom_group = &
fom->fo_loc->fl_group;
1718 return fom->fo_sm_phase.sm_state;
1729 return fom->fo_sm_phase.sm_rc;
1752 return fom->fo_service->rs_reqh;
1755 #undef M0_TRACE_SUBSYSTEM struct m0_addb2_sensor fl_clock
static void addb2_introduce(struct m0_fom *fom)
static void hung_foms_notify(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
M0_INTERNAL void m0_fom_domain_fini(struct m0_fom_domain *dom)
M0_INTERNAL void m0_foms_fini(void)
void m0_fom_phase_moveif(struct m0_fom *fom, int32_t rc, int phase0, int phase1)
static void loc_handler_thread(struct m0_loc_thread *th)
static void fom_ready_cb(struct m0_fom_callback *cb)
void m0_addb2_force(m0_time_t delay)
uint32_t m0_fop_opcode(const struct m0_fop *fop)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
static enum m0_fom_state fom_state(const struct m0_fom *fom)
M0_INTERNAL void m0_fom_wakeup(struct m0_fom *fom)
#define M0_ALLOC_ARR(arr, nr)
M0_INTERNAL int m0_bitmap_init(struct m0_bitmap *map, size_t nr)
M0_INTERNAL int m0_foms_init(void)
static struct m0_sm_state_descr phases[]
static void fom_ready(struct m0_fom *fom)
static int(* diff[M0_PARITY_CAL_ALGO_NR])(struct m0_parity_math *math, struct m0_buf *old, struct m0_buf *new, struct m0_buf *parity, uint32_t index)
struct m0_fom_domain * fl_dom
M0_INTERNAL int m0_sm_addb2_init(struct m0_sm_conf *conf, uint64_t id, uint64_t counter)
M0_INTERNAL void m0_fom_block_enter(struct m0_fom *fom)
struct m0_loc_thread * fl_handler
M0_INTERNAL int m0_thread_confine(struct m0_thread *q, const struct m0_bitmap *processors)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
M0_INTERNAL void m0_bitmap_fini(struct m0_bitmap *map)
struct m0_addb2_hist fl_fom_active
M0_INTERNAL void m0_clink_del(struct m0_clink *link)
M0_INTERNAL bool m0_fom_locality_dec(struct m0_fom *fom)
static const struct m0_locality_chore_ops hung_foms_chore_ops
struct m0_addb2_hist ca_queue_hist
void * m0_locality_data(int key)
int m0_thread_join(struct m0_thread *q)
struct m0_bitmap fl_processors
void(* sa_cb)(struct m0_sm_group *grp, struct m0_sm_ast *)
struct m0_addb2_mach * tls_addb2_mach
struct m0_sm_group_addb2 * s_addb2
struct m0_fom_callback to_cb
static void fom_ast_cb(struct m0_sm_group *grp, struct m0_sm_ast *ast)
static struct io_request req
M0_INTERNAL bool m0_chan_has_waiters(struct m0_chan *chan)
static struct m0_sm_group * grp
static struct m0_sm_trans_descr fom_trans[M0_FOS_TRANS_NR]
M0_INTERNAL void m0_locality_fini(struct m0_locality *loc)
static int loc_thr_create(struct m0_fom_locality *loc)
#define M0_LOG(level,...)
struct m0_tlink fo_linkage
M0_INTERNAL m0_processor_nr_t m0_processor_nr_max(void)
struct m0_sm_group fl_group
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL void m0_locality_dom_unset(struct m0_fom_domain *dom)
struct m0_fom_locality * lt_loc
M0_INTERNAL int m0_fom_domain_init(struct m0_fom_domain **out)
M0_INTERNAL void m0_fom_callback_init(struct m0_fom_callback *cb)
static void thr_addb2_leave(struct m0_loc_thread *thr, struct m0_fom_locality *loc)
#define M0_ADDB2_PUSH(id,...)
static bool fom_clink_cb(struct m0_clink *link)
struct m0_semaphore cl_wait
M0_INTERNAL const char * m0_sm_state_name(const struct m0_sm *mach, int state)
M0_INTERNAL bool m0_clink_is_armed(const struct m0_clink *link)
static void fom_wait(struct m0_fom *fom)
static void fom_timeout_cb(struct m0_sm_timer *timer)
M0_INTERNAL void m0_fom_wait_on(struct m0_fom *fom, struct m0_chan *chan, struct m0_fom_callback *cb)
M0_INTERNAL size_t m0_bitmap_set_nr(const struct m0_bitmap *map)
static void loc_addb2_fini(struct m0_fom_locality *loc)
static void loc_fini(struct m0_fom_locality *loc)
#define M0_THREAD_INIT(thread, TYPE, init, func, arg, namefmt,...)
M0_INTERNAL struct m0 * m0_get(void)
static int fom_timeout_start(struct m0_fom_timeout *to, struct m0_fom *fom, void(*cb)(struct m0_fom_callback *), m0_time_t deadline)
void m0_addb2_hist_mod(struct m0_addb2_hist *hist, int64_t val)
M0_INTERNAL void m0_chan_lock(struct m0_chan *ch)
#define container_of(ptr, type, member)
int m0_locality_call(struct m0_locality *loc, int(*cb)(void *), void *data)
M0_ADDB2_ADD(M0_AVI_FS_CREATE, new_fid.f_container, new_fid.f_key, mode, rc)
M0_INTERNAL bool m0_sm_addb2_counter_init(struct m0_sm *sm)
M0_INTERNAL void m0_locality_chores_run(struct m0_locality *locality)
static bool fom_callback_is_armed(const struct m0_fom_callback *cb)
static bool fom_wait_is_completed(const struct fom_wait_data *wd)
M0_INTERNAL const char * m0_rpc_machine_ep(const struct m0_rpc_machine *rmach)
static int loc_thr_init(struct m0_loc_thread *th)
static struct m0_rpc_item * item
M0_INTERNAL void m0_sm_group_fini(struct m0_sm_group *grp)
M0_INTERNAL int m0_fom_timeout_arm(struct m0_fom_timeout *to, struct m0_fom *fom, void(*cb)(struct m0_fom_callback *), m0_time_t deadline)
static struct m0_fom_domain_ops m0_fom_dom_ops
static void group_unlock(struct m0_fom_locality *loc)
const struct m0_fom_type * fo_type
static void cb_done(struct m0_fom_callback *cb)
#define M0_CHECK_EX(cond)
static void fom_state_set(struct m0_fom *fom, enum m0_fom_state state)
M0_INTERNAL struct m0_thread_tls * m0_thread_tls(void)
static void readyit(struct m0_sm_group *grp, struct m0_sm_ast *ast)
static struct m0_sm_ast ast[NR]
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
M0_INTERNAL int m0_fom_timeout_wait_on(struct m0_fom_timeout *to, struct m0_fom *fom, m0_time_t deadline)
void m0_fom_init(struct m0_fom *fom, const struct m0_fom_type *fom_type, const struct m0_fom_ops *ops, struct m0_fop *fop, struct m0_fop *reply, struct m0_reqh *reqh)
static bool hung_fom_notify(const struct m0_fom *fom)
M0_INTERNAL void m0_chan_signal(struct m0_chan *chan)
struct m0_locality fl_locality
M0_INTERNAL bool m0_fom_is_waiting(const struct m0_fom *fom)
static void fom_addb2_push(struct m0_fom *fom)
struct m0_rpc_machine * c_rpc_machine
struct m0_chan_addb2 fl_chan_addb2
static struct m0_sm_state_descr fom_states[]
struct m0_chan_addb2 * ch_addb2
M0_INTERNAL bool m0_sm_timer_is_armed(const struct m0_sm_timer *timer)
return M0_ERR(-EOPNOTSUPP)
struct m0_addb2_mach * fl_addb2_mach
void m0_addb2_sys_fini(struct m0_addb2_sys *sys)
M0_INTERNAL void m0_clink_attach(struct m0_clink *link, struct m0_clink *group, m0_chan_cb_t cb)
#define M0_ADDB2_IN(id, stmnt,...)
static void cb_cancel(struct m0_fom_callback *cb)
M0_INTERNAL void m0_fom_ready(struct m0_fom *fom)
void m0_addb2_push(uint64_t id, int n, const uint64_t *value)
struct m0_atomic64 fl_unblocking
M0_INTERNAL int m0_dtx_fol_add(struct m0_dtx *tx)
#define M0_AMB(obj, ptr, field)
M0_INTERNAL void m0_addb2_global_thread_leave(void)
struct m0_fom_callback * fo_pending
M0_INTERNAL bool m0_fom_domain_is_idle_for(const struct m0_reqh_service *svc)
M0_INTERNAL void m0_fom_callback_fini(struct m0_fom_callback *cb)
void m0_fom_fini(struct m0_fom *fom)
int m0_addb2_sys_init(struct m0_addb2_sys **out, const struct m0_addb2_config *conf)
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
M0_INTERNAL bool m0_locality_invariant(const struct m0_fom_locality *loc)
M0_INTERNAL void m0_sm_group_init(struct m0_sm_group *grp)
struct m0_sm_group_addb2 fl_grp_addb2
struct m0_sm_group * tr_grp
m0_time_t m0_time_now(void)
void m0_sm_state_set(struct m0_sm *mach, int state)
M0_INTERNAL bool m0_fom_group_is_locked(const struct m0_fom *fom)
static int fom_wait_init(void *data)
void m0_fom_phase_move(struct m0_fom *fom, int32_t rc, int phase)
static struct m0_thread t[8]
static bool thread_invariant(const struct m0_loc_thread *t)
#define M0_ADDB2_OBJ(obj)
M0_INTERNAL void m0_fom_fdmi_record_post(struct m0_fom *fom)
M0_INTERNAL bool m0_fom_domain_is_idle(const struct m0_fom_domain *dom)
static void m0_atomic64_dec(struct m0_atomic64 *a)
static int fom_wait_rc(const struct fom_wait_data *wd)
M0_INTERNAL void m0_locality_dom_set(struct m0_fom_domain *dom)
M0_INTERNAL void m0_addb2_global_thread_enter(void)
struct m0_clink * cl_group
void m0_thread_fini(struct m0_thread *q)
M0_INTERNAL void m0_clink_cleanup_locked(struct m0_clink *link)
M0_INTERNAL void m0_fom_type_init(struct m0_fom_type *type, uint64_t id, const struct m0_fom_type_ops *ops, const struct m0_reqh_service_type *svc_type, const struct m0_sm_conf *sm)
static struct m0_stob_domain * dom
M0_INTERNAL void m0_fom_block_leave(struct m0_fom *fom)
M0_INTERNAL struct m0_sm_conf fom_states_conf
struct m0_fop * m0_fop_get(struct m0_fop *fop)
M0_INTERNAL void m0_clink_signal(struct m0_clink *clink)
struct m0_rpc_item * ri_reply
static void core_mask_apply(struct m0_bitmap *onln_cpu_map)
struct m0_thread lt_thread
M0_INTERNAL void m0_processors_online(struct m0_bitmap *map)
static void loc_thr_fini(struct m0_loc_thread *th)
M0_INTERNAL void m0_fol_fdmi_post_record(struct m0_fom *fom)
int m0_locality_chore_init(struct m0_locality_chore *chore, const struct m0_locality_chore_ops *ops, void *datum, m0_time_t interval, size_t datasize)
M0_INTERNAL void m0_sm_addb2_fini(struct m0_sm_conf *conf)
static void cb_run(struct m0_fom_callback *cb)
struct m0_sm_timer to_timer
M0_INTERNAL void m0_bitmap_set(struct m0_bitmap *map, size_t idx, bool val)
const struct m0_fom_type * fo_type
struct m0_addb2_hist fl_runq_counter
void m0_addb2_clock_add(struct m0_addb2_sensor *clock, uint64_t label, int idx)
void(* fc_bottom)(struct m0_fom_callback *cb)
struct m0_sm_ast * sa_next
static struct m0_clink clink[RDWR_REQUEST_MAX]
int m0_fom_phase(const struct m0_fom *fom)
struct m0_addb2_hist ga_forq_hist
M0_INTERNAL void m0_fom_sm_init(struct m0_fom *fom)
struct m0_tlink lt_linkage
uint64_t m0_time_seconds(const m0_time_t time)
bool(* fc_top)(struct m0_fom_callback *cb)
void m0_addb2_pop(uint64_t id)
M0_INTERNAL void m0_chan_unlock(struct m0_chan *ch)
#define M0_MOTR_IEM_DESC(_sev_id, _mod_id, _evt_id, _desc,...)
void m0_addb2_hist_add_auto(struct m0_addb2_hist *hist, int skip, uint64_t label, int idx)
M0_INTERNAL void m0_fom_callback_arm(struct m0_fom *fom, struct m0_chan *chan, struct m0_fom_callback *cb)
M0_TL_DEFINE(thr, static, struct m0_loc_thread)
M0_INTERNAL bool m0_fom_domain_invariant(const struct m0_fom_domain *dom)
static struct m0_sm_conf fom_states_conf0
static int64_t m0_atomic64_get(const struct m0_atomic64 *a)
M0_INTERNAL int m0_fom_timedwait(struct m0_fom *fom, uint64_t phases, m0_time_t deadline)
#define m0_forall(var, nr,...)
static void fom_exec(struct m0_fom *fom)
static bool is_in_runq(const struct m0_fom *fom)
void m0_locality_chore_fini(struct m0_locality_chore *chore)
static bool fom_is_blocked(const struct m0_fom *fom)
M0_INTERNAL struct m0_reqh_service * m0_reqh_service_find(const struct m0_reqh_service_type *st, const struct m0_reqh *reqh)
M0_INTERNAL void m0_fom_timeout_fini(struct m0_fom_timeout *to)
struct m0_addb2_mach * m0_addb2_sys_get(struct m0_addb2_sys *sys)
static void * cb_next(struct m0_fom_callback *cb)
struct m0_bitmap pca_core_mask
static struct m0_chan chan[RDWR_REQUEST_MAX]
M0_INTERNAL bool m0_tlist_invariant(const struct m0_tl_descr *d, const struct m0_tl *list)
M0_INTERNAL void m0_sm_timer_cancel(struct m0_sm_timer *timer)
static M0_UNUSED struct m0_fom * sm2fom(struct m0_sm *sm)
struct m0_fom_locality * fo_loc
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
static void group_lock(struct m0_fom_locality *loc)
static void queueit(struct m0_sm_group *grp, struct m0_sm_ast *ast)
#define M0_ALLOC_PTR(ptr)
bool(* fdo_time_is_out)(const struct m0_fom_domain *dom, const struct m0_fom *fom)
M0_INTERNAL void m0_clink_add(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL bool m0_chan_timedwait(struct m0_clink *link, const m0_time_t abs_timeout)
struct m0_sm_group rh_sm_grp
enum loc_thread_state lt_state
M0_INTERNAL struct m0_fom_domain * m0_fom_dom(void)
m0_time_t m0_time_sub(const m0_time_t t1, const m0_time_t t2)
struct m0_rpc_session * ri_session
static struct m0_net_test_service svc
M0_INTERNAL bool m0_fom_is_waiting_on(const struct m0_fom *fom)
M0_INTERNAL int m0_fom_rc(const struct m0_fom *fom)
M0_INTERNAL bool m0_bitmap_get(const struct m0_bitmap *map, size_t idx)
M0_INTERNAL void m0_locality_init(struct m0_locality *loc, struct m0_sm_group *grp, struct m0_fom_domain *dom, size_t idx)
struct m0_sm_conf ft_conf
M0_INTERNAL void m0_sm_move(struct m0_sm *mach, int32_t rc, int state)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
void m0_fop_put_lock(struct m0_fop *fop)
static struct m0_fop * fop
#define IS_IN_ARRAY(idx, array)
M0_INTERNAL void m0_fom_callback_cancel(struct m0_fom_callback *cb)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
static bool fom_wait_time_is_out(const struct m0_fom_domain *dom, const struct m0_fom *fom)
M0_INTERNAL void m0_fom_queue(struct m0_fom *fom)
struct m0_addb2_hist ca_wait_hist
M0_INTERNAL struct m0_uint128 m0_node_uuid
struct m0_proc_attr i_proc_attr
struct m0_addb2_sys * fd_addb2_sys
static struct m0_fom * fom_dequeue(struct m0_fom_locality *loc)
M0_INTERNAL int m0_fom_fol_rec_add(struct m0_fom *fom)
#define M0_MKTIME(secs, ns)
static void fom_type(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
M0_INTERNAL void m0_semaphore_drain(struct m0_semaphore *semaphore)
void(* co_tick)(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
struct m0_thread_handle t_h
struct m0_addb2_hist ca_cb_hist
static void thr_addb2_enter(struct m0_loc_thread *thr, struct m0_fom_locality *loc)
M0_INTERNAL void m0_fom_locality_inc(struct m0_fom *fom)
void m0_addb2_sys_put(struct m0_addb2_sys *sys, struct m0_addb2_mach *m)
M0_INTERNAL void m0_sm_ast_cancel(struct m0_sm_group *grp, struct m0_sm_ast *ast)
struct m0_addb2_hist fl_wail_counter
M0_INTERNAL uint64_t m0_pid(void)
void m0_fom_phase_set(struct m0_fom *fom, int phase)
M0_INTERNAL void m0_fom_timeout_init(struct m0_fom_timeout *to)
M0_INTERNAL void m0_sm_timer_fini(struct m0_sm_timer *timer)
static int fom_wait_fini(void *data)
void m0_addb2_hist_add(struct m0_addb2_hist *hist, int64_t min, int64_t max, uint64_t label, int idx)
M0_INTERNAL void m0_sm_asts_run(struct m0_sm_group *grp)
M0_INTERNAL void m0_sm_timer_init(struct m0_sm_timer *timer)
static struct m0_dtm_oper_descr reply
M0_INTERNAL uint64_t m0_sm_id_get(const struct m0_sm *sm)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
static bool is_loc_locker_empty(struct m0_fom_locality *loc, uint32_t key)
struct m0_rpc_item f_item
const struct m0_reqh_service_type * ft_rstype
M0_INTERNAL struct m0_fom_type * m0_fom__types[M0_OPCODES_NR]
M0_INTERNAL void m0_chan_broadcast(struct m0_chan *chan)
M0_INTERNAL struct m0_reqh * m0_fom2reqh(const struct m0_fom *fom)
static bool fom_wait_cb(struct m0_clink *clink)
M0_INTERNAL bool m0_tlink_invariant(const struct m0_tl_descr *d, const void *obj)
M0_INTERNAL int m0_sm_timer_start(struct m0_sm_timer *timer, struct m0_sm_group *group, void(*cb)(struct m0_sm_timer *), m0_time_t deadline)
struct m0_fom_callback fo_cb
struct m0_rpc_conn * s_conn
M0_TL_DESCR_DEFINE(thr, "fom thread", static, struct m0_loc_thread, lt_linkage, lt_magix, M0_FOM_THREAD_MAGIC, M0_FOM_THREAD_HEAD_MAGIC)
struct m0_sm_conf ft_state_conf
static int64_t m0_atomic64_add_return(struct m0_atomic64 *a, int64_t d)
M0_INTERNAL struct m0_reqh * m0_fom_reqh(const struct m0_fom *fom)
M0_INTERNAL void m0_fom_timeout_cancel(struct m0_fom_timeout *to)
static void m0_atomic64_set(struct m0_atomic64 *a, int64_t num)
M0_INTERNAL const char * m0_rpc_item_remote_ep_addr(const struct m0_rpc_item *item)
M0_INTERNAL bool m0_fom_invariant(const struct m0_fom *fom)
enum m0_fc_state fc_state
M0_INTERNAL const char * m0_fom_phase_name(const struct m0_fom *fom, int phase)
static bool is_in_wail(const struct m0_fom *fom)
#define m0_tl_forall(name, var, head,...)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)
static int loc_init(struct m0_fom_locality *loc, struct m0_fom_domain *dom, size_t idx)