23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_CAS 74 #define CASREQ_FOP_DATA(fop) ((struct m0_cas_op *)m0_fop_data(fop)) 97 .sd_name =
"request-sent",
102 .sd_name =
"request-fragment-sent",
107 .sd_name =
"assembly",
116 .sd_name =
"failure",
180 op->cg_rec.cr_nr = recs_nr;
181 op->cg_rec.cr_rec = rec;
205 req->ccr_sess = sess;
213 return req->ccr_sess->s_conn;
223 return req->ccr_sm.sm_grp;
266 uint32_t cur_state =
req->ccr_sm.sm_state;
272 if (
req->ccr_reply_item !=
NULL)
275 req->ccr_fop->f_data.fd_data =
NULL;
281 req->ccr_req_op->cg_rec =
req->ccr_rec_orig;
411 req->ccr_ftype = ftype;
433 &
req->ccr_fop->f_item,
452 return &
req->ccr_fop->f_item;
470 rc =
req->ccr_sm.sm_rc;
474 rc =
req->ccr_reply.cgr_rc;
495 for (
i = 0;
i <
op->cg_rec.cr_nr;
i++)
496 sum +=
op->cg_rec.cr_rec[
i].cr_rc;
499 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
500 rec = &
rep->cgr_rep.cr_rec[
i];
501 if ((int32_t)rec->
cr_rc > 0 &&
516 if (
op->cg_rec.cr_nr !=
rep->cgr_rep.cr_nr)
523 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
524 rec = &
rep->cgr_rep.cr_rec[
i];
525 if (rec->
cr_rc == 0 &&
536 const struct m0_fop *rfop =
req->ccr_fop;
563 req->ccr_failure_ast.sa_datum = (
void *)(
long)
rc;
587 req->ccr_sent_recs_nr +=
op->cg_rec.cr_nr;
603 M0_PRE(idx < kv->ov_vec.v_nr);
639 req->ccr_asmbl_ikeys[idx] = orig_idx;
653 const struct m0_fop *rfop =
req->ccr_fop;
666 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
667 rcvd = &
rep->cgr_rep.cr_rec[
i];
678 const struct m0_fop *rfop =
req->ccr_fop;
696 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
697 rcvd = &
rep->cgr_rep.cr_rec[
i];
722 uint64_t asmbl_count;
727 if (asmbl_count > 0) {
729 if (
req->ccr_asmbl_ikeys ==
NULL) {
756 return it->cni_req_i <=
it->cni_reqv->cr_nr &&
757 it->cni_rep_i <=
it->cni_repv->cr_nr;
764 it->cni_reqv = &
op->cg_rec;
765 it->cni_repv = &
rep->cgr_rep;
778 if (
it->cni_rep_i ==
it->cni_repv->cr_nr)
782 it->cni_rep = &
it->cni_repv->cr_rec[
it->cni_rep_i++];
784 if (
it->cni_rep->cr_rc == 1 ||
785 ((int32_t)
it->cni_rep->cr_rc <= 0 &&
it->cni_req_i == 0) ||
786 it->cni_kpos ==
it->cni_req->cr_rc) {
789 it->cni_req = &
it->cni_reqv->cr_rec[
it->cni_req_i];
818 rec = &
op->cg_rec.cr_rec[
i];
826 if (
op->cg_rec.cr_rec[
i].cr_kv_bufs.cv_rec ==
NULL) {
834 op->cg_rec.cr_nr =
i + 1;
843 const struct m0_fop *rfop =
req->ccr_fop;
897 const struct m0_fop *rfop =
req->ccr_fop;
917 if (
rc != 0 && !bulk)
983 if ((int32_t)rcvd->
cr_rc > 0) {
1011 for (
i = 0;
i <
rep->cgr_rep.cr_nr;
i++) {
1012 rec = &
rep->cgr_rep.cr_rec[
i];
1013 if (rec->
cr_rc == 0) {
1017 orig_i =
req->ccr_asmbl_ikeys[
i];
1039 req->ccr_remid =
rep->cgr_mod_rep.fmr_remid;
1043 bool *fragm_continue)
1050 uint64_t reply_seed;
1056 req->ccr_max_replies_nr);
1057 *fragm_continue =
false;
1065 reply_seed =
reply->cgr_rep.cr_nr;
1067 reply->cgr_rep.cr_rec[reply_seed +
i] =
1083 if (
req->ccr_sent_recs_nr <
req->ccr_rec_orig.cr_nr) {
1087 *fragm_continue =
true;
1100 bool fragm_continue;
1145 bool assembly_wait =
false;
1146 bool suppress_err_msg;
1147 bool fragm_continue;
1154 !
req->ccr_is_meta) {
1160 if (!assembly_wait) {
1162 if (
rc == 0 && !fragm_continue)
1175 suppress_err_msg = !
req->ccr_is_meta &&
1222 rec =
op->cg_rec.cr_rec;
1223 for (
i = 0;
i < cids_nr;
i++) {
1236 &
buf.b_addr, &
buf.b_nob);
1243 else if (recv_val) {
1256 op->cg_rec.cr_nr =
i + 1;
1273 req->ccr_req_op->cg_rec.cr_nr);
1279 uint64_t max_replies_nr,
1287 reply_recv = &
req->ccr_reply.cgr_rep;
1292 reply_recv->
cr_nr = 0;
1293 req->ccr_max_replies_nr = max_replies_nr;
1294 req->ccr_is_meta =
true;
1297 req->ccr_rec_orig = (*op)->cg_rec;
1298 req->ccr_req_op = *
op;
1303 reply_recv->
cr_nr = 0;
1313 return req->ccr_reply.cgr_rep.cr_nr;
1439 const struct m0_fid *start_fid,
1440 uint32_t indices_nr,
1457 op->cg_rec.cr_rec[0].cr_rc = indices_nr;
1475 if (service_rc == 0)
1484 else if (service_rc < 0)
1502 rec = &recv->
cr_rec[idx];
1505 if (
rep->clr_rc == 0) {
1521 req->ccr_rec_orig.cr_rec !=
NULL);
1522 M0_PRE(
req->ccr_sent_recs_nr <
req->ccr_rec_orig.cr_nr);
1527 op->cg_rec.cr_nr = 0;
1528 op->cg_rec.cr_rec = &
req->ccr_rec_orig.cr_rec[
req->ccr_sent_recs_nr];
1541 }
while (
req->ccr_sent_recs_nr +
op->cg_rec.cr_nr <
1542 req->ccr_rec_orig.cr_nr);
1543 if (
op->cg_rec.cr_nr == 0)
1550 op->cg_rec =
req->ccr_rec_orig;
1593 &
index->ci_layout.u.dl_desc);
1596 rec =
op->cg_rec.cr_rec;
1597 for (
i = 0;
i < keys_nr;
i++) {
1600 if (
rc == 0 && values !=
NULL) {
1608 op->cg_rec.cr_nr =
i + 1;
1622 uint64_t max_replies_nr,
1630 reply_recv = &
req->ccr_reply.cgr_rep;
1635 reply_recv->
cr_nr = 0;
1636 req->ccr_max_replies_nr = max_replies_nr;
1637 req->ccr_is_meta =
false;
1640 req->ccr_rec_orig = (*op)->cg_rec;
1641 req->ccr_req_op = *
op;
1646 reply_recv->
cr_nr = 0;
1725 ab = &
op->cg_rec.cr_rec[
i].cr_val;
1735 op->cg_rec.cr_nr =
i;
1739 req->ccr_keys = keys;
1776 sent = &
req->ccr_rec_orig.cr_rec[idx];
1779 if (
rep->cge_rc == 0)
1792 uint64_t max_replies_nr = 0;
1808 max_replies_nr += recs_nr[
i];
1814 op->cg_rec.cr_rec[
i].cr_rc = recs_nr[
i];
1815 req->ccr_keys = start_keys;
1906 #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_id_fini(struct m0_cas_id *cid)
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_dix_ldesc_copy(struct m0_dix_ldesc *dst, const struct m0_dix_ldesc *src)
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)
struct m0_xcode_type * m0_cas_id_xc
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)
M0_INTERNAL const struct m0_fid_type m0_cctg_fid_type
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
M0_INTERNAL const struct m0_fid_type * m0_fid_type_getfid(const struct m0_fid *fid)
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)