23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 102 "t_payload_prepared=%" PRId64 " " 169 log_position, log_discarded);
227 grp_tlist_init(&gr->
tg_txs);
265 grp_tlist_fini(&gr->
tg_txs);
280 grp_tlink_init_at_tail(tx, &gr->
tg_txs);
379 grp_tlink_del_fini(tx);
385 return grp_tlist_length(&gr->
tg_txs);
444 bool del_tx_from_group)
448 M0_ENTRY(
"gr=%p state=%s group_tx_nr=%zd",
454 if (del_tx_from_group)
490 for (
i = 0;
i < reg_nr; ++
i) {
530 rtxs_tlink_del_fini(rtx);
552 for (
i = 0;
i < tx_nr; ++
i) {
656 #undef M0_TRACE_SUBSYSTEM m0_bcount_t tgc_payload_max
struct m0_be_tx_credit t_prepared
struct m0_be_reg_area tg_reg_area
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_be_tx_group_discard(struct m0_be_log_discard *ld, struct m0_be_log_discard_item *ldi)
#define M0_ALLOC_ARR(arr, nr)
struct be_recovering_tx * tg_rtxs
M0_INTERNAL void m0_be_group_format_prepare(struct m0_be_group_format *gft, struct m0_be_op *op)
M0_INTERNAL void m0_be_tx_group_seg_io_credit(struct m0_be_tx_group_cfg *gr_cfg, struct m0_be_io_credit *io_cred)
M0_INTERNAL void m0_be_tx_group_close(struct m0_be_tx_group *gr)
static void be_tx_group_recovering_gc(struct m0_be_tx *tx, void *param)
struct m0_be_group_format tg_od
M0_INTERNAL void m0_be_group_format_log_read(struct m0_be_group_format *gft, struct m0_be_op *op)
struct m0_tl tg_txs_recovering
M0_INTERNAL int m0_be_tx_group_init(struct m0_be_tx_group *gr, struct m0_be_tx_group_cfg *gr_cfg)
M0_INTERNAL void m0_be_tx_lsn_set(struct m0_be_tx *tx, m0_bindex_t lsn, m0_bindex_t lsn_discarded)
M0_INTERNAL void m0_be_group_format_seg_io_credit(struct m0_be_group_format_cfg *gft_cfg, struct m0_be_io_credit *io_cred)
M0_INTERNAL void m0_be_tx_group_recovery_prepare(struct m0_be_tx_group *gr, struct m0_be_log *log)
M0_INTERNAL m0_bindex_t m0_be_group_format_log_discarded(const struct m0_be_group_format *gft)
M0_INTERNAL void m0_be_group_format_reg_get(const struct m0_be_group_format *gft, uint32_t index, struct m0_be_reg_d *rd)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
M0_INTERNAL void m0_clink_del(struct m0_clink *link)
M0_INTERNAL void m0_be_group_format_recovery_prepare(struct m0_be_group_format *gft, struct m0_be_log *log)
static struct be_recovering_tx * tx2tx_group_recovering_tx(struct m0_be_tx *tx)
m0_bcount_t t_log_reserved_size
M0_INTERNAL int m0_be_reg_area_merger_init(struct m0_be_reg_area_merger *brm, int reg_area_nr_max)
M0_INTERNAL void m0_be_group_format_reset(struct m0_be_group_format *gft)
M0_INTERNAL struct m0_sm_group * m0_be_tx_group__sm_group(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_engine__tx_group_ready(struct m0_be_engine *en, struct m0_be_tx_group *gr)
static void be_tx_group_tx_to_gr_map(const struct m0_be_tx *tx, const struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_tx_group_tx_closed(struct m0_be_tx_group *gr, struct m0_be_tx *tx)
struct m0_be_log_discard * tgc_log_discard
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_credit_sub(struct m0_be_tx_credit *c0, const struct m0_be_tx_credit *c1)
static struct m0_sm_group * grp
M0_INTERNAL void m0_be_tx_group_fom_recovery_prepare(struct m0_be_tx_group_fom *m)
#define M0_LOG(level,...)
M0_INTERNAL void m0_be_tx__recovering_set(struct m0_be_tx *tx)
m0_bcount_t tg_payload_prepared
M0_INTERNAL void m0_be_tx_group__deallocate(struct m0_be_tx_group *gr)
struct m0_be_domain * tgc_domain
struct m0_be_domain * tg_domain
M0_INTERNAL struct m0_be_reg_area * m0_be_tx__reg_area(struct m0_be_tx *tx)
M0_INTERNAL void m0_be_group_format_encode(struct m0_be_group_format *gft)
M0_TL_DESCR_DEFINE(rtxs, "m0_be_tx_group::tg_txs_recovering", static, struct be_recovering_tx, rtx_link, rtx_magic, M0_BE_TX_MAGIC, M0_BE_TX_GROUP_MAGIC)
#define M0_BE_TX_GROUP_TX_ENDFOR
static void be_tx_group_reconstruct_reg_area(struct m0_be_tx_group *gr)
static void be_tx_group_reg_area_gather(struct m0_be_tx_group *gr)
M0_INTERNAL int m0_be_group_format_allocate(struct m0_be_group_format *gft)
M0_INTERNAL void m0_be_tx_group_fom_stable(struct m0_be_tx_group_fom *gf)
M0_INTERNAL void m0_be_reg_area_merger_add(struct m0_be_reg_area_merger *brm, struct m0_be_reg_area *ra)
struct m0_be_engine * tg_engine
#define container_of(ptr, type, member)
M0_INTERNAL int m0_be_tx_group_start(struct m0_be_tx_group *gr)
M0_ADDB2_ADD(M0_AVI_FS_CREATE, new_fid.f_container, new_fid.f_key, mode, rc)
struct m0_be_group_format_cfg tgc_format
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_group_format_discard(struct m0_be_log_discard *ld, struct m0_be_log_discard_item *ldi)
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_reg_area_capture(struct m0_be_reg_area *ra, struct m0_be_reg_d *rd)
#define M0_BE_REG_AREA_FORALL(ra, rd)
static void be_tx_group_tx_add(struct m0_be_tx_group *gr, struct m0_be_tx *tx)
M0_INTERNAL void m0_be_reg_area_fini(struct m0_be_reg_area *ra)
M0_INTERNAL int m0_be_reg_area_init(struct m0_be_reg_area *ra, const struct m0_be_tx_credit *prepared, enum m0_be_reg_area_type type)
M0_INTERNAL void m0_be_tx_group_log_write(struct m0_be_tx_group *gr, struct m0_be_op *op)
M0_INTERNAL void m0_be_group_format_reg_seg_add(struct m0_be_group_format *gft, const struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_tx_group_encode(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_reg_area_reset(struct m0_be_reg_area *ra)
M0_INTERNAL uint32_t m0_be_group_format_reg_nr(const struct m0_be_group_format *gft)
struct m0_be_log * tgc_log
M0_INTERNAL void m0_be_reg_area_used(struct m0_be_reg_area *ra, struct m0_be_tx_credit *used)
M0_INTERNAL void m0_be_tx_deconstruct(struct m0_be_tx *tx, struct m0_be_fmt_tx *ftx)
struct m0_be_op rtx_op_open
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)
struct m0_be_tx_credit tgc_size_max
M0_INTERNAL void m0_be_group_format_seg_place(struct m0_be_group_format *gft, struct m0_be_op *op)
M0_INTERNAL void m0_be_reg_area_merger_merge_to(struct m0_be_reg_area_merger *brm, struct m0_be_reg_area *ra)
M0_INTERNAL void m0_be_tx__group_assign(struct m0_be_tx *tx, struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_group_format_log_write(struct m0_be_group_format *gft, struct m0_be_op *op)
M0_INTERNAL void m0_be_group_format_tx_add(struct m0_be_group_format *gft, struct m0_be_fmt_tx *ftx)
M0_INTERNAL void m0_be_tx_credit_add(struct m0_be_tx_credit *c0, const struct m0_be_tx_credit *c1)
struct m0_be_tx_credit tg_used
struct m0_be_tx_credit tg_size
#define M0_BE_TX_GROUP_TX_FORALL(gr, tx)
M0_INTERNAL void m0_be_tx_group_tx_del(struct m0_be_tx_group *gr, struct m0_be_tx *tx)
static void be_tx_group_payload_gather(struct m0_be_tx_group *gr)
M0_INTERNAL struct m0_be_seg * m0_be_domain_seg(const struct m0_be_domain *dom, const void *addr)
M0_INTERNAL void m0_be_reg_area_captured(struct m0_be_reg_area *ra, struct m0_be_tx_credit *captured)
M0_INTERNAL bool m0_be_tx_group_is_recovering(struct m0_be_tx_group *gr)
struct m0_be_tx_group_fom tg_fom
static bool be_tx_group_recovering_tx_open(struct m0_clink *clink)
M0_INTERNAL void m0_be_group_format_log_use(struct m0_be_group_format *gft, m0_bcount_t size_reserved)
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)
unsigned long tgc_tx_nr_max
M0_INTERNAL struct m0_sm_group * m0_be_tx_group_fom__sm_group(struct m0_be_tx_group_fom *m)
m0_bcount_t t_payload_prepared
M0_INTERNAL void m0_be_tx_close(struct m0_be_tx *tx)
M0_INTERNAL void m0_be_group_format_reg_log_add(struct m0_be_group_format *gft, const struct m0_be_reg_d *rd)
struct m0_be_tx_credit tg_log_reserved
struct m0_reqh * tgc_reqh
struct m0_be_reg_area_merger tg_merger
M0_INTERNAL void m0_be_op_done(struct m0_be_op *op)
M0_INTERNAL void m0_be_reg_area_optimize(struct m0_be_reg_area *ra)
M0_INTERNAL int m0_be_group_format_init(struct m0_be_group_format *gft, struct m0_be_group_format_cfg *gft_cfg, struct m0_be_tx_group *group, struct m0_be_log *log)
M0_INTERNAL void m0_be_reg_area_merger_reset(struct m0_be_reg_area_merger *brm)
static struct m0_clink clink[RDWR_REQUEST_MAX]
M0_INTERNAL m0_bindex_t m0_be_group_format_log_position(const struct m0_be_group_format *gft)
M0_INTERNAL void m0_be_tx_group_log_read(struct m0_be_tx_group *gr, struct m0_be_op *op)
M0_INTERNAL void m0_be_tx_group_stop(struct m0_be_tx_group *gr)
M0_INTERNAL bool m0_be_tx_group__invariant(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_reg_area_merger_fini(struct m0_be_reg_area_merger *brm)
M0_INTERNAL void m0_be_tx_init(struct m0_be_tx *tx, uint64_t tid, struct m0_be_domain *dom, struct m0_sm_group *sm_group, m0_be_tx_cb_t persistent, m0_be_tx_cb_t discarded, void(*filler)(struct m0_be_tx *tx, void *payload), void *datum)
M0_INTERNAL void m0_be_tx_group_fom_stop(struct m0_be_tx_group_fom *gf)
M0_INTERNAL void m0_be_group_format_seg_place_prepare(struct m0_be_group_format *gft)
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)
M0_INTERNAL int m0_be_tx_group_tx_add(struct m0_be_tx_group *gr, struct m0_be_tx *tx)
struct m0_be_tx_group_cfg tg_cfg
M0_INTERNAL void m0_be_group_format_fini(struct m0_be_group_format *gft)
M0_INTERNAL void m0_be_op_active(struct m0_be_op *op)
M0_INTERNAL void m0_be_tx_group_seg_place_prepare(struct m0_be_tx_group *gr)
M0_INTERNAL uint32_t m0_be_group_format_tx_nr(const struct m0_be_group_format *gft)
static void be_tx_group_deconstruct(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_tx_reconstruct(struct m0_be_tx *tx, const struct m0_be_fmt_tx *ftx)
struct m0_be_engine * tgc_engine
M0_INTERNAL void m0_clink_add(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL void m0_be_reg_area_prepared(struct m0_be_reg_area *ra, struct m0_be_tx_credit *prepared)
M0_INTERNAL void m0_be_tx_group_fini(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_tx_open(struct m0_be_tx *tx)
static void be_tx_group_reconstruct_transactions(struct m0_be_tx_group *gr, struct m0_sm_group *sm_grp)
M0_INTERNAL void m0_be_op_fini(struct m0_be_op *op)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
M0_INTERNAL void m0_be_op_set_add(struct m0_be_op *parent, struct m0_be_op *child)
M0_INTERNAL m0_bcount_t m0_be_group_format_log_reserved_size(struct m0_be_log *log, struct m0_be_tx_credit *cred, m0_bcount_t cred_payload)
M0_INTERNAL bool m0_be_tx__is_recovering(struct m0_be_tx *tx)
M0_INTERNAL int m0_be_tx_group_decode(struct m0_be_tx_group *gr)
M0_INTERNAL void m0_be_tx_gc_enable(struct m0_be_tx *tx, void(*gc_free)(struct m0_be_tx *, void *param), void *param)
static struct m0_be_seg * seg
M0_INTERNAL int m0_be_tx_group_reapply(struct m0_be_tx_group *gr, struct m0_be_op *op)
#define M0_ASSERT_INFO(cond, fmt,...)
M0_INTERNAL int m0_be_group_format_decode(struct m0_be_group_format *gft)
M0_INTERNAL const char * m0_be_tx_state_name(enum m0_be_tx_state state)
M0_INTERNAL void m0_be_tx_group_stable(struct m0_be_tx_group *gr)
M0_INTERNAL bool m0_be_tx_credit_le(const struct m0_be_tx_credit *c0, const struct m0_be_tx_credit *c1)
M0_INTERNAL int m0_be_tx_group_reconstruct(struct m0_be_tx_group *gr, struct m0_sm_group *sm_grp)
struct m0_clink rtx_open_wait
M0_INTERNAL uint64_t m0_sm_id_get(const struct m0_sm *sm)
unsigned long tgc_seg_nr_max
#define m0_tl_for(name, head, obj)
M0_INTERNAL void m0_be_op_init(struct m0_be_op *op)
M0_INTERNAL void m0_be_tx__state_post(struct m0_be_tx *tx, enum m0_be_tx_state state)
struct m0_be_seg * br_seg
M0_INTERNAL void m0_be_tx_group_open(struct m0_be_tx_group *gr)
M0_TL_DEFINE(rtxs, static, struct be_recovering_tx)
struct m0_be_op rtx_op_gc
M0_INTERNAL void m0_be_group_format_tx_get(const struct m0_be_group_format *gft, uint32_t index, struct m0_be_fmt_tx *ftx)
M0_INTERNAL void m0_be_tx_group_fom_handle(struct m0_be_tx_group_fom *m)
M0_INTERNAL void m0_be_log_unreserve(struct m0_be_log *log, m0_bcount_t size)
struct m0_be_log * tg_log
M0_INTERNAL void m0_be_tx_group_prepare(struct m0_be_tx_group *gr, struct m0_be_op *op)