32 #include "fol/fol_xc.h" 34 #include "fop/fop_xc.h" 36 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_FOL 64 #define FRAG_HEADER_XCODE_OBJ(ptr) \ 65 M0_XCODE_OBJ(m0_fol_frag_header_xc, ptr) 67 #define FRAG_XCODE_OBJ(r) (struct m0_xcode_obj) { \ 68 .xo_type = frag->rp_ops != NULL ? \ 69 frag->rp_ops->rpo_type->rpt_xt : \ 70 m0_fop_fol_frag_type.rpt_xt, \ 71 .xo_ptr = r->rp_data \ 100 m0_rec_frag_tlist_init(&rec->
fr_frags);
111 m0_rec_frag_tlist_fini(&rec->
fr_frags);
128 type->rpt_ops->rpto_rec_frag_init(frag);
129 m0_rec_frag_tlink_init(frag);
138 if (m0_rec_frag_tlink_is_in(frag))
139 m0_rec_frag_tlist_del(frag);
140 m0_rec_frag_tlink_fini(frag);
362 if (rp_data ==
NULL) {
385 ret = snprintf(str, str_len,
"rec->fr_header->rh_frags_nr: %u\n" 386 "rec->fr_header->rh_data_len: %u\n" 387 "rec->fr_header->rh_self->ui_node: %u\n" 388 "rec->fr_header->rh_self->ui_update: %" PRIu64 "\n" 389 "rec->fr_epoch: %p\n" 390 "rec->fr_sibling: %p\n",
394 if (ret >= str_len) {
409 ret = snprintf(str, str_len,
411 "frag->rp_ops->rpo_type: %p\n" 412 "frag->rp_ops->rpo_type->rpt_index: %" PRIu32 414 "frag->rp_ops->rpo_type->rpt_name: %s\n" 415 "frag->rp_data: %p\n",
421 if (ret >= str_len) {
433 .xo_type = m0_fop_fol_frag_xc,
437 ret = snprintf(str, str_len,
438 "rp->ffrp_fop_code: %u\n" 439 "rp->ffrp_rep_code: %u\n",
443 if (ret >= str_len) {
455 }
else if (ret >= str_len) {
472 m0_rec_frag_tlist_add_tail(&rec->
fr_frags, frag);
475 #undef M0_TRACE_SUBSYSTEM
#define M0_BUFVEC_INIT_BUF(addr_ptr, count_ptr)
M0_INTERNAL int m0_xcode_encdec(struct m0_xcode_obj *obj, struct m0_bufvec_cursor *cur, enum m0_xcode_what what)
M0_INTERNAL int m0_xcode_print(const struct m0_xcode_obj *obj, char *str, int nr)
#define M0_REC_HEADER_XCODE_OBJ(ptr)
M0_INTERNAL void m0_fol_fini(struct m0_fol *fol)
struct m0_fol_rec_header fr_header
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
static const struct m0_fol_frag_type * rptypes[FOL_FRAG_TYPE_MAX]
#define FRAG_HEADER_XCODE_OBJ(ptr)
M0_INTERNAL void m0_fol_rec_fini(struct m0_fol_rec *rec)
static struct buffer * cur(struct m0_addb2_mach *mach, m0_bcount_t space)
const struct m0_fol_frag_ops * rp_ops
M0_INTERNAL int m0_fol_frag_type_register(struct m0_fol_frag_type *type)
M0_INTERNAL void m0_fol_frag_init(struct m0_fol_frag *frag, void *data, const struct m0_fol_frag_type *type)
static int fol_record_pack(struct m0_fol_rec *rec, struct m0_buf *buf)
M0_INTERNAL void m0_xcode_free_obj(struct m0_xcode_obj *obj)
#define FRAG_XCODE_OBJ(r)
M0_INTERNAL void * m0_bufvec_cursor_addr(struct m0_bufvec_cursor *cur)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
struct m0_fol_frag_type m0_fop_fol_frag_type
const struct m0_fol_frag_type * rpo_type
M0_INTERNAL void m0_fols_fini(void)
M0_INTERNAL void m0_fol_rec_init(struct m0_fol_rec *rec, struct m0_fol *fol)
return M0_ERR(-EOPNOTSUPP)
int m0_fol_rec_to_str(struct m0_fol_rec *rec, char *str, int str_len)
const struct m0_xcode_type * rpt_xt
M0_TL_DEFINE(m0_rec_frag, M0_INTERNAL, struct m0_fol_frag)
static int fol_rec_encdec(struct m0_fol_rec *rec, struct m0_bufvec_cursor *cur, enum m0_xcode_what what)
static struct m0_bufvec bvec
M0_INTERNAL void m0_fol_init(struct m0_fol *fol)
static size_t fol_record_pack_size(struct m0_fol_rec *rec)
M0_INTERNAL void m0_bufvec_cursor_init(struct m0_bufvec_cursor *cur, const struct m0_bufvec *bvec)
void * m0_alloc(size_t size)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
struct m0_epoch_id * fr_epoch
M0_INTERNAL bool m0_fol_rec_invariant(const struct m0_fol_rec *rec)
M0_INTERNAL int m0_xcode_data_size(struct m0_xcode_ctx *ctx, const struct m0_xcode_obj *obj)
static bool at(struct ff2c_context *ctx, char c)
struct m0_fol_update_ref * fr_sibling
M0_INTERNAL void m0_fol_frag_fini(struct m0_fol_frag *frag)
static struct m0_mutex rptypes_lock
M0_INTERNAL int m0_fols_init(void)
#define M0_ALLOC_PTR(ptr)
enum m0_xcode_what rp_flag
M0_INTERNAL void m0_fol_frag_add(struct m0_fol_rec *rec, struct m0_fol_frag *frag)
static const struct m0_fol_frag_type * fol_frag_type_lookup(uint32_t index)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
#define IS_IN_ARRAY(idx, array)
M0_INTERNAL void m0_fol_frag_type_deregister(struct m0_fol_frag_type *type)
#define M0_IS_8ALIGNED(val)
#define m0_tl_for(name, head, obj)
static uint64_t m0_align(uint64_t val, uint64_t alignment)
M0_TL_DESCR_DEFINE(m0_rec_frag, "fol record fragment", M0_INTERNAL, struct m0_fol_frag, rp_link, rp_magic, M0_FOL_FRAG_LINK_MAGIC, M0_FOL_FRAG_HEAD_MAGIC)
M0_INTERNAL int m0_fol_rec_encode(struct m0_fol_rec *rec, struct m0_buf *at)
static size_t fol_rec_header_pack_size(struct m0_fol_rec_header *h)
M0_INTERNAL int m0_fol_rec_decode(struct m0_fol_rec *rec, struct m0_buf *at)