23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_CAS 38 #include "cas/cas_xc.h" 72 #define CASREQ_FOP_DATA(fop) ((struct m0_cas_op *)m0_fop_data(fop)) 95 .sd_name =
"request-sent",
100 .sd_name =
"request-fragment-sent",
105 .sd_name =
"assembly",
114 .sd_name =
"failure",
178 op->cg_rec.cr_nr = recs_nr;
179 op->cg_rec.cr_rec = rec;
202 req->ccr_sess = sess;
210 return req->ccr_sess->s_conn;
220 return req->ccr_sm.sm_grp;
263 uint32_t cur_state =
req->ccr_sm.sm_state;
269 if (
req->ccr_reply_item !=
NULL)
272 req->ccr_fop->f_data.fd_data =
NULL;
278 req->ccr_req_op->cg_rec =
req->ccr_rec_orig;
408 req->ccr_ftype = ftype;
430 &
req->ccr_fop->f_item,
449 return &
req->ccr_fop->f_item;
467 rc =
req->ccr_sm.sm_rc;
471 rc =
req->ccr_reply.cgr_rc;
492 for (
i = 0;
i <
op->cg_rec.cr_nr;
i++)
493 sum +=
op->cg_rec.cr_rec[
i].cr_rc;
496 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
497 rec = &
rep->cgr_rep.cr_rec[
i];
498 if ((int32_t)rec->
cr_rc > 0 &&
513 if (
op->cg_rec.cr_nr !=
rep->cgr_rep.cr_nr)
520 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
521 rec = &
rep->cgr_rep.cr_rec[
i];
522 if (rec->
cr_rc == 0 &&
533 const struct m0_fop *rfop =
req->ccr_fop;
560 req->ccr_failure_ast.sa_datum = (
void *)(
long)
rc;
584 req->ccr_sent_recs_nr +=
op->cg_rec.cr_nr;
600 M0_PRE(idx < kv->ov_vec.v_nr);
636 req->ccr_asmbl_ikeys[idx] = orig_idx;
650 const struct m0_fop *rfop =
req->ccr_fop;
663 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
664 rcvd = &
rep->cgr_rep.cr_rec[
i];
675 const struct m0_fop *rfop =
req->ccr_fop;
693 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
694 rcvd = &
rep->cgr_rep.cr_rec[
i];
719 uint64_t asmbl_count;
724 if (asmbl_count > 0) {
726 if (
req->ccr_asmbl_ikeys ==
NULL) {
753 return it->cni_req_i <=
it->cni_reqv->cr_nr &&
754 it->cni_rep_i <=
it->cni_repv->cr_nr;
761 it->cni_reqv = &
op->cg_rec;
762 it->cni_repv = &
rep->cgr_rep;
775 if (
it->cni_rep_i ==
it->cni_repv->cr_nr)
779 it->cni_rep = &
it->cni_repv->cr_rec[
it->cni_rep_i++];
781 if (
it->cni_rep->cr_rc == 1 ||
782 ((int32_t)
it->cni_rep->cr_rc <= 0 &&
it->cni_req_i == 0) ||
783 it->cni_kpos ==
it->cni_req->cr_rc) {
786 it->cni_req = &
it->cni_reqv->cr_rec[
it->cni_req_i];
815 rec = &
op->cg_rec.cr_rec[
i];
823 if (
op->cg_rec.cr_rec[
i].cr_kv_bufs.cv_rec ==
NULL) {
831 op->cg_rec.cr_nr =
i + 1;
840 const struct m0_fop *rfop =
req->ccr_fop;
894 const struct m0_fop *rfop =
req->ccr_fop;
914 if (
rc != 0 && !bulk)
980 if ((int32_t)rcvd->
cr_rc > 0) {
1008 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
1009 rec = &
rep->cgr_rep.cr_rec[
i];
1010 if (rec->
cr_rc == 0) {
1014 orig_i =
req->ccr_asmbl_ikeys[
i];
1036 req->ccr_remid =
rep->cgr_mod_rep.fmr_remid;
1040 bool *fragm_continue)
1047 uint64_t reply_seed;
1053 req->ccr_max_replies_nr);
1054 *fragm_continue =
false;
1062 reply_seed =
reply->cgr_rep.cr_nr;
1064 reply->cgr_rep.cr_rec[reply_seed +
i] =
1080 if (
req->ccr_sent_recs_nr <
req->ccr_rec_orig.cr_nr) {
1084 *fragm_continue =
true;
1097 bool fragm_continue;
1142 bool assembly_wait =
false;
1143 bool suppress_err_msg;
1144 bool fragm_continue;
1151 !
req->ccr_is_meta) {
1157 if (!assembly_wait) {
1159 if (
rc == 0 && !fragm_continue)
1172 suppress_err_msg = !
req->ccr_is_meta &&
1219 rec =
op->cg_rec.cr_rec;
1220 for (
i = 0;
i < cids_nr;
i++) {
1233 &
buf.b_addr, &
buf.b_nob);
1240 else if (recv_val) {
1253 op->cg_rec.cr_nr =
i + 1;
1270 req->ccr_req_op->cg_rec.cr_nr);
1276 uint64_t max_replies_nr,
1284 reply_recv = &
req->ccr_reply.cgr_rep;
1289 reply_recv->
cr_nr = 0;
1290 req->ccr_max_replies_nr = max_replies_nr;
1291 req->ccr_is_meta =
true;
1294 req->ccr_rec_orig = (*op)->cg_rec;
1295 req->ccr_req_op = *
op;
1300 reply_recv->
cr_nr = 0;
1310 return req->ccr_reply.cgr_rep.cr_nr;
1436 const struct m0_fid *start_fid,
1437 uint32_t indices_nr,
1454 op->cg_rec.cr_rec[0].cr_rc = indices_nr;
1472 if (service_rc == 0)
1481 else if (service_rc < 0)
1499 rec = &recv->
cr_rec[idx];
1502 if (
rep->clr_rc == 0) {
1518 req->ccr_rec_orig.cr_rec !=
NULL);
1519 M0_PRE(
req->ccr_sent_recs_nr <
req->ccr_rec_orig.cr_nr);
1524 op->cg_rec.cr_nr = 0;
1525 op->cg_rec.cr_rec = &
req->ccr_rec_orig.cr_rec[
req->ccr_sent_recs_nr];
1538 }
while (
req->ccr_sent_recs_nr +
op->cg_rec.cr_nr <
1539 req->ccr_rec_orig.cr_nr);
1540 if (
op->cg_rec.cr_nr == 0)
1547 op->cg_rec =
req->ccr_rec_orig;
1587 rec =
op->cg_rec.cr_rec;
1588 for (
i = 0;
i < keys_nr;
i++) {
1591 if (
rc == 0 && values !=
NULL) {
1599 op->cg_rec.cr_nr =
i + 1;
1613 uint64_t max_replies_nr,
1621 reply_recv = &
req->ccr_reply.cgr_rep;
1626 reply_recv->
cr_nr = 0;
1627 req->ccr_max_replies_nr = max_replies_nr;
1628 req->ccr_is_meta =
false;
1631 req->ccr_rec_orig = (*op)->cg_rec;
1632 req->ccr_req_op = *
op;
1637 reply_recv->
cr_nr = 0;
1716 ab = &
op->cg_rec.cr_rec[
i].cr_val;
1726 op->cg_rec.cr_nr =
i;
1730 req->ccr_keys = keys;
1767 sent = &
req->ccr_rec_orig.cr_rec[idx];
1770 if (
rep->cge_rc == 0)
1783 uint64_t max_replies_nr = 0;
1799 max_replies_nr += recs_nr[
i];
1805 op->cg_rec.cr_rec[
i].cr_rc = recs_nr[
i];
1806 req->ccr_keys = start_keys;
1897 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL void m0_cas_req_fini(struct m0_cas_req *req)
static void creq_kv_hold_down(struct m0_cas_rec *rec)
M0_INTERNAL int m0_rpc_post(struct m0_rpc_item *item)
struct m0_rpc_at_buf cr_val
static int cas_req_prep(struct m0_cas_req *req, const struct m0_cas_id *index, const struct m0_bufvec *keys, const struct m0_bufvec *values, uint64_t max_replies_nr, uint32_t flags, struct m0_cas_op **op)
M0_INTERNAL void m0_sm_conf_init(struct m0_sm_conf *conf)
#define M0_ALLOC_ARR(arr, nr)
struct m0_cas_rec * cni_rep
M0_INTERNAL void m0_sm_fail(struct m0_sm *mach, int fail_state, int32_t rc)
static int greq_asmbl_fill(struct m0_cas_req *req, struct m0_cas_op *op)
static struct m0_cas_req * item_to_cas_req(struct m0_rpc_item *item)
enum m0_rpc_item_priority ri_prio
static void cas_to_rpc_map(const struct m0_cas_req *creq, const struct m0_rpc_item *item)
struct m0_rpc_at_buf ck_key
static int cas_req_fragmentation(struct m0_cas_req *req)
int const char const void size_t int flags
static void creq_fop_destroy(struct m0_cas_req *req)
M0_INTERNAL int m0_sm_addb2_init(struct m0_sm_conf *conf, uint64_t id, uint64_t counter)
static int creq_fop_create(struct m0_cas_req *req, struct m0_fop_type *ftype, struct m0_cas_op *op)
struct m0_cas_recv * cni_repv
static const struct m0_rpc_item_ops cas_item_ops
M0_INTERNAL int m0_cas_index_list(struct m0_cas_req *req, const struct m0_fid *start_fid, uint32_t indices_nr, uint32_t flags)
static int cas_records_op_prepare(const struct m0_cas_req *req, const struct m0_cas_id *index, const struct m0_bufvec *keys, const struct m0_bufvec *values, uint32_t flags, struct m0_cas_op **out)
static struct io_request req
static struct m0_sm_group * grp
M0_INTERNAL void m0_fop_init(struct m0_fop *fop, struct m0_fop_type *fopt, void *data, void(*fop_release)(struct m0_ref *))
#define M0_LOG(level,...)
static struct m0_sm_trans_descr cas_req_trans[]
M0_INTERNAL void m0_rpc_at_init(struct m0_rpc_at_buf *ab)
static void creq_niter_init(struct creq_niter *it, struct m0_cas_op *op, struct m0_cas_rep *rep)
static void cas_req_state_set(struct m0_cas_req *req, enum m0_cas_req_state state)
M0_INTERNAL bool m0_cas_req_is_locked(const struct m0_cas_req *req)
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL bool m0_rpc_at_is_set(const struct m0_rpc_at_buf *ab)
static void creq_asmbl_fop_release(struct m0_ref *ref)
void m0_rpc_item_get(struct m0_rpc_item *item)
M0_INTERNAL int m0_dtx0_txd_copy(const struct m0_dtx *dtx, struct m0_dtm0_tx_desc *dst)
M0_INTERNAL void m0_cas_get_rep(const struct m0_cas_req *req, uint64_t idx, struct m0_cas_get_reply *rep)
M0_INTERNAL const struct m0_fid m0_cas_meta_fid
static bool nreq_asmbl_post(struct m0_cas_req *req)
static void cas_rep_copy(const struct m0_cas_req *req, uint64_t idx, struct m0_cas_rec_reply *rep)
void * m0_fop_data(const struct m0_fop *fop)
static struct m0_be_emap_cursor it
M0_INTERNAL const char * m0_sm_state_name(const struct m0_sm *mach, int state)
struct m0_cas_recv cgr_rep
M0_INTERNAL void m0_cas_index_create_rep(const struct m0_cas_req *req, uint64_t idx, struct m0_cas_rec_reply *rep)
M0_INTERNAL int m0_rpc_at_add(struct m0_rpc_at_buf *ab, const struct m0_buf *buf, const struct m0_rpc_conn *conn)
static void cas_fop_send(struct m0_cas_req *req)
struct m0_fop ccr_asmbl_fop
#define container_of(ptr, type, member)
#define CASREQ_FOP_DATA(fop)
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)
static struct m0_rpc_item * item
struct m0_fop_getxattr_rep * rep
M0_INTERNAL int m0_cas_get(struct m0_cas_req *req, struct m0_cas_id *index, const struct m0_bufvec *keys)
struct m0_rpc_at_buf cr_val
M0_INTERNAL void m0_dtm0_tx_desc_init_none(struct m0_dtm0_tx_desc *td)
static void cas_req_failure_ast(struct m0_sm_group *grp, struct m0_sm_ast *ast)
static void creq_rep_override(struct m0_cas_rec *orig, struct m0_cas_rec *new)
M0_INTERNAL int m0_rpc_at_rep_get(struct m0_rpc_at_buf *sent, struct m0_rpc_at_buf *rcvd, struct m0_buf *out)
static void creq_asmbl_fop_init(struct m0_cas_req *req, struct m0_fop_type *ftype, struct m0_cas_op *op)
M0_INTERNAL void m0_cas_req_unlock(struct m0_cas_req *req)
M0_INTERNAL bool m0_cas_id_invariant(const struct m0_cas_id *cid)
M0_INTERNAL int m0_sm_timedwait(struct m0_sm *mach, uint64_t states, m0_time_t deadline)
M0_INTERNAL void m0_cas_req_lock(struct m0_cas_req *req)
static struct m0_sm_group * cas_req_smgrp(const struct m0_cas_req *req)
static int cas_req_fragment_continue(struct m0_cas_req *req, struct m0_cas_op *op)
struct m0_cas_rec * cr_rec
static void nreq_asmbl_accept(struct m0_cas_req *req)
static struct m0_sm_ast ast[NR]
static void cas_req_replied_cb(struct m0_rpc_item *item)
struct m0_rpc_at_buf ck_val
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
int32_t m0_rpc_item_generic_reply_rc(const struct m0_rpc_item *reply)
struct m0_rpc_at_buf cr_key
static int cas_index_op_prepare(const struct m0_cas_req *req, const struct m0_cas_id *cids, uint64_t cids_nr, bool recv_val, uint32_t flags, struct m0_cas_op **out)
struct m0_fop_type * f_type
struct m0_rpc_machine * c_rpc_machine
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL int m0_cas_req_generic_rc(const struct m0_cas_req *req)
static const struct m0_rpc_item_ops asmbl_item_ops
M0_INTERNAL bool m0_rpc_at_rep_is_bulk(const struct m0_rpc_at_buf *rcvd, uint64_t *len)
M0_INTERNAL void m0_cas_req_init(struct m0_cas_req *req, struct m0_rpc_session *sess, struct m0_sm_group *grp)
static void cas_req_replied_ast(struct m0_sm_group *grp, struct m0_sm_ast *ast)
#define M0_AMB(obj, ptr, field)
static void cas_req_failure_ast_post(struct m0_cas_req *req, int32_t rc)
M0_INTERNAL void m0_cas_put_rep(struct m0_cas_req *req, uint64_t idx, struct m0_cas_rec_reply *rep)
M0_INTERNAL int m0_cas_next(struct m0_cas_req *req, struct m0_cas_id *index, struct m0_bufvec *start_keys, uint32_t *recs_nr, uint32_t flags)
M0_INTERNAL int m0_cas_versioned_get(struct m0_cas_req *req, struct m0_cas_id *index, const struct m0_bufvec *keys)
static struct m0_cas_rep * cas_rep(struct m0_rpc_item *reply)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
M0_INTERNAL void m0_cas_next_rep(const struct m0_cas_req *req, uint32_t idx, struct m0_cas_next_reply *rep)
static int nreq_asmbl_fill(struct m0_cas_req *req, struct m0_cas_op *op)
void m0_sm_state_set(struct m0_sm *mach, int state)
static struct m0_rpc_machine * creq_rpc_mach(const struct m0_cas_req *req)
M0_INTERNAL int m0_cas_sm_conf_init(void)
M0_INTERNAL bool m0_rpc_item_max_payload_exceeded(struct m0_rpc_item *item, struct m0_rpc_session *session)
static int greq_asmbl_add(struct m0_cas_req *req, struct m0_cas_rec *rec, uint64_t idx, uint64_t orig_idx, uint64_t vlen)
M0_INTERNAL int m0_xcode_obj_enc_to_buf(struct m0_xcode_obj *obj, void **buf, m0_bcount_t *len)
M0_INTERNAL struct m0_fop_type cas_get_fopt
static struct m0_sm_state_descr cas_req_states[]
M0_INTERNAL int m0_cas_del(struct m0_cas_req *req, struct m0_cas_id *index, struct m0_bufvec *keys, struct m0_dtx *dtx, uint32_t flags)
static int nreq_asmbl_prep(struct m0_cas_req *req, struct m0_cas_op *op)
struct m0_cas_kv * cv_rec
struct m0_rpc_item * ri_reply
struct m0_cas_rec * cni_req
M0_INTERNAL struct m0_fop_type cas_cur_fopt
M0_INTERNAL void m0_sm_addb2_fini(struct m0_sm_conf *conf)
static int cas_rep_validate(const struct m0_cas_req *req)
struct m0_sm_conf cas_req_sm_conf
static void creq_recv_fini(struct m0_cas_recv *recv, bool op_is_meta)
M0_INTERNAL int m0_cas_index_create(struct m0_cas_req *req, const struct m0_cas_id *cids, uint64_t cids_nr, struct m0_dtx *dtx)
M0_INTERNAL void m0_cas_index_list_rep(struct m0_cas_req *req, uint32_t idx, struct m0_cas_ilist_reply *rep)
M0_INTERNAL void m0_buf_free(struct m0_buf *buf)
M0_INTERNAL void m0_fop_fini(struct m0_fop *fop)
void(* rio_sent)(struct m0_rpc_item *item)
struct m0_cas_kv_vec cr_kv_bufs
struct m0_sm_ast ccr_failure_ast
struct m0_cas_recv cg_rec
struct m0_cas_hint cr_hint
static int creq_fop_create_and_prepare(struct m0_cas_req *req, struct m0_fop_type *ftype, struct m0_cas_op *op, enum m0_cas_req_state *next_state)
M0_INTERNAL int m0_cas_index_delete(struct m0_cas_req *req, const struct m0_cas_id *cids, uint64_t cids_nr, struct m0_dtx *dtx, uint32_t flags)
static uint64_t greq_asmbl_count(const struct m0_cas_req *req)
static void creq_op_free(struct m0_cas_op *op)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
#define m0_forall(var, nr,...)
M0_INTERNAL struct m0_fop_type cas_del_fopt
static int creq_niter_next(struct creq_niter *it)
M0_INTERNAL void m0_cas_sm_conf_fini(void)
static struct m0_rpc_conn * creq_rpc_conn(const struct m0_cas_req *req)
struct m0_fop_data f_data
int32_t m0_rpc_item_error(const struct m0_rpc_item *item)
M0_INTERNAL void m0_cas_index_delete_rep(const struct m0_cas_req *req, uint64_t idx, struct m0_cas_rec_reply *rep)
M0_INTERNAL void m0_cas_req_fini_lock(struct m0_cas_req *req)
M0_INTERNAL void m0_cas_del_rep(struct m0_cas_req *req, uint64_t idx, struct m0_cas_rec_reply *rep)
M0_INTERNAL uint64_t m0_cas_req_nr(const struct m0_cas_req *req)
void m0_rpc_item_put_lock(struct m0_rpc_item *item)
#define M0_FI_ENABLED(tag)
static void creq_asmbl_replied_cb(struct m0_rpc_item *item)
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 bool greq_asmbl_post(struct m0_cas_req *req)
M0_INTERNAL int m0_cas_index_lookup(struct m0_cas_req *req, const struct m0_cas_id *cids, uint64_t cids_nr)
static int creq_op_alloc(uint64_t recs_nr, struct m0_cas_op **out)
#define M0_ALLOC_PTR(ptr)
static int cas_next_rc(int64_t service_rc)
const struct m0_rpc_item_ops * ri_ops
static void creq_item_prepare(const struct m0_cas_req *req, struct m0_rpc_item *item, const struct m0_rpc_item_ops *ops)
static void addb2_add_cas_req_attrs(const struct m0_cas_req *req)
static void creq_niter_fini(struct creq_niter *it)
M0_INTERNAL int m0_cas_put(struct m0_cas_req *req, struct m0_cas_id *index, const struct m0_bufvec *keys, const struct m0_bufvec *values, struct m0_dtx *dtx, uint32_t flags)
struct m0_sm_ast ccr_replied_ast
struct m0_rpc_session * ri_session
static struct m0_rpc_item * cas_req_to_item(const struct m0_cas_req *req)
static int m0_cas__get(struct m0_cas_req *req, struct m0_cas_id *index, const struct m0_bufvec *keys, int flags)
M0_INTERNAL int m0_cas_req_wait(struct m0_cas_req *req, uint64_t states, m0_time_t to)
M0_INTERNAL void m0_rpc_at_fini(struct m0_rpc_at_buf *ab)
struct m0_rpc_at_buf cr_key
static bool creq_niter_invariant(struct creq_niter *it)
void m0_fop_put_lock(struct m0_fop *fop)
static int creq_kv_buf_add(const struct m0_cas_req *req, const struct m0_bufvec *kv, uint32_t idx, struct m0_rpc_at_buf *buf)
static struct m0_fop * fop
static void greq_asmbl_accept(struct m0_cas_req *req)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
struct m0_fop * m0_rpc_item_to_fop(const struct m0_rpc_item *item)
static void cas_req_reply_fini(struct m0_cas_req *req)
#define M0_XCODE_OBJ(type, ptr)
M0_INTERNAL struct m0_fop_type cas_put_fopt
M0_INTERNAL void m0_cas_rep_mlock(const struct m0_cas_req *req, uint64_t idx)
static void cas_req_fini(struct m0_cas_req *req)
static int cas_req_reply_handle(struct m0_cas_req *req, bool *fragm_continue)
static void cas_req_fsync_remid_copy(struct m0_cas_req *req)
M0_INTERNAL void m0_sm_conf_fini(struct m0_sm_conf *conf)
static int cas_rep__validate(const struct m0_fop_type *ftype, struct m0_cas_op *op, struct m0_cas_rep *rep)
static void creq_asmbl_replied_ast(struct m0_sm_group *grp, struct m0_sm_ast *ast)
struct m0_cas_recv * cni_reqv
struct m0_rpc_machine * ri_rmachine
static void cas_req_failure(struct m0_cas_req *req, int32_t rc)
static struct m0_dtm_oper_descr reply
M0_INTERNAL uint64_t m0_sm_id_get(const struct m0_sm *sm)
M0_INTERNAL int m0_rpc_at_rep2inline(struct m0_rpc_at_buf *sent, struct m0_rpc_at_buf *rcvd)
struct m0_rpc_item f_item
#define M0_BUF_INIT(size, data)
M0_INTERNAL void m0_dtm0_tx_desc_fini(struct m0_dtm0_tx_desc *td)
M0_INTERNAL void m0_cas_index_lookup_rep(const struct m0_cas_req *req, uint64_t idx, struct m0_cas_rec_reply *rep)
static struct m0_sm_state_descr states[C_NR]
static int cas_index_req_prepare(struct m0_cas_req *req, const struct m0_cas_id *cids, uint64_t cids_nr, uint64_t max_replies_nr, bool recv_val, uint32_t flags, struct m0_cas_op **op)
const m0_time_t M0_TIME_IMMEDIATELY
static void creq_fop_release(struct m0_ref *ref)
static bool fid_is_meta(struct m0_fid *fid)
M0_INTERNAL void m0_rpc_at_detach(struct m0_rpc_at_buf *ab)
M0_INTERNAL int m0_rpc_at_recv(struct m0_rpc_at_buf *ab, const struct m0_rpc_conn *conn, uint32_t len, bool force_bulk)
static bool cas_rep_val_is_valid(struct m0_rpc_at_buf *val, struct m0_fid *idx_fid)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)