23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 116 #define _S(name, flags, allowed) \ 120 .sd_allowed = allowed \ 157 M0_ENTRY(
"tx_group_fom=%p group=%p phase=%s",
m, gr,
167 if (
m->tgf_stopping) {
178 if (
m->tgf_recovery_mode) {
190 &
m->tgf_gen.fo_loc->fl_group);
315 m->tgf_stable =
true;
326 m->tgf_stopping =
true;
342 m->tgf_stable =
false;
343 m->tgf_stopping =
false;
345 #define _AST(handler) (struct m0_sm_ast){ .sa_cb = (handler) } 371 m->tgf_recovery_mode =
false;
372 m->tgf_stable =
false;
420 return &
m->tgf_gen.fo_loc->fl_group;
426 m->tgf_recovery_mode =
true;
440 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL void m0_be_tx_group_seg_place(struct m0_be_tx_group *gr, struct m0_be_op *op)
M0_INTERNAL int m0_be_tx_group_fom_start(struct m0_be_tx_group_fom *gf)
M0_INTERNAL void m0_fom_wakeup(struct m0_fom *fom)
static void be_tx_group_fom_ast_post(struct m0_be_tx_group_fom *gf, struct m0_sm_ast *ast)
static struct m0_addb2_mach * m
M0_INTERNAL void m0_be_tx_group_reconstruct_tx_close(struct m0_be_tx_group *gr, struct m0_be_op *op_gc)
M0_INTERNAL void m0_be_tx_group_fom_recovery_prepare(struct m0_be_tx_group_fom *m)
#define M0_LOG(level,...)
struct m0_semaphore tgf_start_sem
struct m0_sm_group fl_group
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
static struct m0_sm_state_descr tx_group_fom_states[TGS_NR]
M0_INTERNAL void m0_be_tx_group__deallocate(struct m0_be_tx_group *gr)
int(* fto_create)(struct m0_fop *fop, struct m0_fom **out, struct m0_reqh *reqh)
static int tx_group_fom_tick(struct m0_fom *fom)
M0_INTERNAL void m0_be_tx_group_fom_stable(struct m0_be_tx_group_fom *gf)
struct m0_sm_ast tgf_ast_handle
#define container_of(ptr, type, member)
static struct m0_fom_type tx_group_fom_type
M0_INTERNAL void m0_be_tx_group_fom_mod_fini(void)
M0_INTERNAL void m0_be_tx_group_fom_reset(struct m0_be_tx_group_fom *m)
M0_INTERNAL void m0_be_tx_group_reset(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_tx_group_reconstruct_tx_open(struct m0_be_tx_group *gr, struct m0_be_op *op)
M0_INTERNAL void m0_be_tx_group_log_write(struct m0_be_tx_group *gr, struct m0_be_op *op)
static struct m0_sm_ast ast[NR]
M0_INTERNAL void m0_be_tx_group_fom_mod_init(void)
M0_INTERNAL void m0_be_tx_group_encode(struct m0_be_tx_group *gr)
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)
M0_INTERNAL bool m0_fom_is_waiting(const struct m0_fom *fom)
M0_INTERNAL void m0_fom_ready(struct m0_fom *fom)
#define M0_AMB(obj, ptr, field)
static void be_tx_group_fom_stop(struct m0_sm_group *gr, struct m0_sm_ast *ast)
static void be_tx_group_fom_stable(struct m0_sm_group *_, struct m0_sm_ast *ast)
M0_INTERNAL void m0_be_tx_group__tx_state_post(struct m0_be_tx_group *gr, enum m0_be_tx_state state, bool del_tx_from_group)
M0_INTERNAL int m0_be_tx_group__allocate(struct m0_be_tx_group *gr)
void m0_fom_fini(struct m0_fom *fom)
struct m0_sm_ast tgf_ast_stop
void m0_fom_phase_move(struct m0_fom *fom, int32_t rc, int phase)
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)
M0_INTERNAL void m0_be_tx_group_fom_init(struct m0_be_tx_group_fom *m, struct m0_be_tx_group *gr, struct m0_reqh *reqh)
M0_INTERNAL size_t m0_be_tx_group_tx_nr(struct m0_be_tx_group *gr)
M0_INTERNAL struct m0_sm_group * m0_be_tx_group_fom__sm_group(struct m0_be_tx_group_fom *m)
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
static const struct m0_fom_type_ops tx_group_fom_type_ops
M0_INTERNAL void m0_be_tx_group_log_read(struct m0_be_tx_group *gr, struct m0_be_op *op)
static const struct m0_sm_conf tx_group_fom_conf
M0_INTERNAL void m0_be_tx_group_fom_stop(struct m0_be_tx_group_fom *gf)
static size_t tx_group_fom_locality(const struct m0_fom *fom)
M0_INTERNAL void m0_be_tx_group_fom_fini(struct m0_be_tx_group_fom *m)
M0_INTERNAL void m0_be_op_reset(struct m0_be_op *op)
struct m0_semaphore tgf_finish_sem
M0_INTERNAL void m0_be_tx_group_seg_place_prepare(struct m0_be_tx_group *gr)
static void be_tx_group_fom_iff_waiting_wakeup(struct m0_fom *fom)
struct m0_fom_locality * fo_loc
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
M0_INTERNAL int m0_be_op_tick_ret(struct m0_be_op *op, struct m0_fom *fom, int next_state)
M0_INTERNAL int m0_fom_rc(const struct m0_fom *fom)
M0_INTERNAL void m0_be_op_fini(struct m0_be_op *op)
M0_INTERNAL int m0_be_tx_group_decode(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_fom_queue(struct m0_fom *fom)
M0_INTERNAL int m0_be_tx_group_reapply(struct m0_be_tx_group *gr, struct m0_be_op *op)
static void tx_group_fom_fini(struct m0_fom *fom)
void(* fo_fini)(struct m0_fom *fom)
#define M0_ASSERT_INFO(cond, fmt,...)
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
M0_INTERNAL int m0_be_tx_group_reconstruct(struct m0_be_tx_group *gr, struct m0_sm_group *sm_grp)
void m0_fom_phase_set(struct m0_fom *fom, int phase)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
static void be_tx_group_fom_handle(struct m0_sm_group *gr, struct m0_sm_ast *ast)
struct m0_sm_ast tgf_ast_stable
struct m0_reqh_service_type m0_be_txs_stype
M0_INTERNAL void m0_be_op_init(struct m0_be_op *op)
#define _S(name, flags, allowed)
M0_INTERNAL void m0_be_tx_group_open(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_tx_group_fom_handle(struct m0_be_tx_group_fom *m)
static struct m0_be_tx_group_fom * fom2tx_group_fom(const struct m0_fom *fom)
M0_INTERNAL const char * m0_fom_phase_name(const struct m0_fom *fom, int phase)
M0_INTERNAL void m0_be_tx_group_prepare(struct m0_be_tx_group *gr, struct m0_be_op *op)
#define M0_IMPOSSIBLE(fmt,...)
static const struct m0_fom_ops tx_group_fom_ops