23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 39 struct m0_be_op, bo_set_link, bo_set_link_magic,
46 .sd_name =
"M0_BOS_INIT",
51 .sd_name =
"M0_BOS_ACTIVE",
56 .sd_name =
"M0_BOS_DONE",
77 op->bo_sm.sm_invariant_chk_off =
true;
99 bos_tlist_init(&
op->bo_children);
102 op->bo_is_op_set =
false;
104 op->bo_rc_is_set =
false;
110 bos_tlist_fini(&
op->bo_children);
146 bos_tlist_del(child);
157 op->bo_is_op_set =
false;
158 op->bo_rc_is_set =
false;
169 bool state_changed =
false;
170 bool last_child =
false;
183 if (!
op->bo_is_op_set ||
186 bos_tlist_is_empty(&
op->bo_children)))) {
199 op->bo_cb_active(
op,
op->bo_cb_active_param);
202 op->bo_cb_done(
op,
op->bo_cb_done_param);
204 cb_gc =
op->bo_cb_gc;
205 cb_gc_param =
op->bo_cb_gc_param;
207 state_changed =
true;
213 cb_gc(
op, cb_gc_param);
215 if (parent !=
NULL && state_changed &&
249 op->bo_cb_active = cb;
250 op->bo_cb_active_param =
param;
320 op->bo_rc_is_set =
true;
337 #undef M0_TRACE_SUBSYSTEM static struct m0_sm_state_descr op_states[]
M0_INTERNAL int m0_be_op_rc(struct m0_be_op *op)
static void be_op_sm_init(struct m0_be_op *op)
const m0_time_t M0_TIME_NEVER
M0_INTERNAL void m0_be_op_active(struct m0_be_op *op)
M0_INTERNAL void m0_be_op_done(struct m0_be_op *op)
M0_INTERNAL void m0_be_op_wait(struct m0_be_op *op)
M0_TL_DESCR_DEFINE(bos, "m0_be_op::bo_children", static, struct m0_be_op, bo_set_link, bo_set_link_magic, M0_BE_OP_SET_LINK_MAGIC, M0_BE_OP_SET_MAGIC)
M0_INTERNAL void m0_be_op_unlock(struct m0_be_op *op)
M0_INTERNAL void m0_fom_wait_on(struct m0_fom *fom, struct m0_chan *chan, struct m0_fom_callback *cb)
void(* m0_be_op_cb_t)(struct m0_be_op *op, void *param)
M0_INTERNAL void m0_be_op_callback_set(struct m0_be_op *op, m0_be_op_cb_t cb, void *param, enum m0_be_op_state state)
M0_INTERNAL bool m0_sm_addb2_counter_init(struct m0_sm *sm)
M0_INTERNAL void m0_be_op_rc_set(struct m0_be_op *op, int rc)
M0_INTERNAL void m0_sm_group_fini(struct m0_sm_group *grp)
struct m0_be_op * bo_parent
M0_INTERNAL int m0_sm_timedwait(struct m0_sm *mach, uint64_t states, m0_time_t deadline)
M0_INTERNAL void m0_be_op_fini(struct m0_be_op *op)
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
M0_INTERNAL void m0_sm_group_init(struct m0_sm_group *grp)
void m0_sm_state_set(struct m0_sm *mach, int state)
static void be_op_sm_fini(struct m0_be_op *op)
static struct m0_sm_trans_descr op_trans[]
static void be_op_set_add(struct m0_be_op *parent, struct m0_be_op *child)
static bool be_op_set_del(struct m0_be_op *parent, struct m0_be_op *child)
M0_INTERNAL struct m0_sm_conf op_states_conf
M0_INTERNAL void m0_be_op_init(struct m0_be_op *op)
M0_INTERNAL void m0_be_op_reset(struct m0_be_op *op)
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 int m0_be_op_tick_ret(struct m0_be_op *op, struct m0_fom *fom, int next_state)
M0_TL_DEFINE(bos, static, struct m0_be_op)
M0_INTERNAL void m0_be_op_set_add(struct m0_be_op *parent, struct m0_be_op *child)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
static void be_op_state_change(struct m0_be_op *op, enum m0_be_op_state state)
#define M0_ASSERT_INFO(cond, fmt,...)
M0_INTERNAL bool m0_be_op_is_locked(const struct m0_be_op *op)
void m0_fom_phase_set(struct m0_fom *fom, int phase)
M0_INTERNAL void m0_be_op_lock(struct m0_be_op *op)
M0_INTERNAL bool m0_sm_group_is_locked(const struct m0_sm_group *grp)
M0_INTERNAL bool m0_be_op_is_done(struct m0_be_op *op)
#define M0_IMPOSSIBLE(fmt,...)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)