23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_RPC 53 int32_t *out_nr_segments,
119 M0_PRE(rpc_buffer_bob_check(rpcbuf) &&
144 if (rpcbuf ==
NULL) {
160 " set error to %d",
p,
item,
194 M0_ENTRY(
"rbuf: %p packet: %p", rpcbuf,
p);
216 rpc_buffer_bob_init(rpcbuf);
233 M0_ENTRY(
"netbuf: %p ndom: %p bufsize: %llu", netbuf, ndom,
241 segment_size, M0_SEG_SHIFT);
263 int32_t *out_nr_segments,
269 int32_t max_nr_segments;
279 "max_buf_size: %llu max_segment_size: %llu max_nr_seg: %d",
280 (
unsigned long long)max_buf_size,
281 (
unsigned long long)max_segment_size, max_nr_segments);
293 segment_size = max_segment_size;
295 nr_segments =
buf_size / max_segment_size;
296 if (
buf_size % max_segment_size != 0)
300 *out_segment_size = segment_size;
301 *out_nr_segments = nr_segments;
303 M0_LEAVE(
"seg_size: %llu nr_segments: %d",
304 (
unsigned long long)*out_segment_size, *out_nr_segments);
310 M0_ENTRY(
"netbuf: %p ndom: %p", netbuf, ndom);
329 M0_PRE(rpc_buffer_bob_check(rpcbuf));
354 M0_PRE(rpc_buffer_bob_check(rpcbuf));
361 rpc_buffer_bob_fini(rpcbuf);
401 p->rp_status = -EINVAL;
405 if (
p->rp_status == 0) {
406 stats->rs_nr_sent_packets++;
407 stats->rs_nr_sent_bytes +=
p->rp_size;
409 stats->rs_nr_failed_packets++;
479 "ri_deadline=%" PRIu64 " ri_nr_sent=%u",
item,
522 stats->rs_nr_sent_items++;
525 stats->rs_nr_sent_items_uniq++;
532 stats->rs_nr_resent_items++;
584 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL uint32_t m0_rpc_max_segs_nr(struct m0_net_domain *ndom)
static struct m0_addb2_philter p
struct m0_chan rm_nb_idle
M0_INTERNAL void m0_rpc_item_change_state(struct m0_rpc_item *item, enum m0_rpc_item_state state)
struct m0_bufvec nb_buffer
M0_INTERNAL int m0_net_buffer_register(struct m0_net_buffer *buf, struct m0_net_domain *dom)
M0_INTERNAL void m0_rpc_frm_packet_done(struct m0_rpc_packet *p)
void m0_rpc_item_put(struct m0_rpc_item *item)
#define M0_LOG(level,...)
M0_INTERNAL void m0_rpc_packet_traverse_items(struct m0_rpc_packet *p, item_visit_fn *visit, int opaque_data)
M0_INTERNAL void m0_rpc_item_failed(struct m0_rpc_item *item, int32_t rc)
static void item_done(struct m0_rpc_packet *p, struct m0_rpc_item *item, int rc)
struct m0_net_domain * ntm_dom
struct m0_rpc_item * ri_pending_reply
M0_INTERNAL const char * item_kind(const struct m0_rpc_item *item)
struct m0_net_buffer * nbe_buffer
m0_time_t m0_time(uint64_t secs, long ns)
static struct m0_rpc_item * item
M0_INTERNAL struct m0_rpc_chan * frm_rchan(const struct m0_rpc_frm *frm)
static void item_sent(struct m0_rpc_item *item)
M0_INTERNAL bool m0_rpc_item_is_request(const struct m0_rpc_item *item)
M0_INTERNAL bool m0_rpc_packet_invariant(const struct m0_rpc_packet *p)
int m0_bufvec_alloc_aligned(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size, unsigned shift)
static struct m0_trace_stats stats
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL void m0_rpc_machine_unlock(struct m0_rpc_machine *machine)
M0_INTERNAL void m0_rpc_item_process_reply(struct m0_rpc_item *req, struct m0_rpc_item *reply)
M0_INTERNAL struct m0_rpc_machine * frm_rmachine(const struct m0_rpc_frm *frm)
static struct m0_rpc_machine * rpc_buffer__rmachine(const struct rpc_buffer *rpcbuf)
enum m0_net_queue_type nb_qtype
struct m0_net_transfer_mc rm_tm
M0_INTERNAL bool m0_rpc_item_is_oneway(const struct m0_rpc_item *item)
M0_INTERNAL m0_bcount_t m0_rpc_max_msg_size(struct m0_net_domain *ndom, m0_bcount_t rpc_size)
static const struct m0_net_buffer_callbacks rpc_buf_send_cb
static int rpc_buffer_submit(struct rpc_buffer *rpcbuf)
static int packet_ready(struct m0_rpc_packet *p)
#define bob_of(ptr, type, field, bt)
struct m0_net_buffer rb_netbuf
static void net_buffer_free(struct m0_net_buffer *netbuf, struct m0_net_domain *ndom)
struct m0_net_end_point * rc_destep
const struct m0_rpc_item_type * ri_type
const struct m0_net_buffer_callbacks * nb_callbacks
M0_INTERNAL int m0_rpc_packet_encode(struct m0_rpc_packet *p, struct m0_bufvec *bufvec)
int(* fo_packet_ready)(struct m0_rpc_packet *p)
m0_net_buffer_cb_proc_t nbc_cb[M0_NET_QT_NR]
struct m0_rpc_machine machine
M0_INTERNAL void m0_bufvec_free_aligned(struct m0_bufvec *bufvec, unsigned shift)
M0_INTERNAL m0_bcount_t m0_vec_count(const struct m0_vec *vec)
static void buf_send_cb(const struct m0_net_buffer_event *ev)
M0_INTERNAL bool m0_rpc_item_is_reply(const struct m0_rpc_item *item)
static int rpc_buffer_init(struct rpc_buffer *rpcbuf, struct m0_rpc_packet *p)
#define M0_MAGIX_OFFSET(type, field)
M0_INTERNAL void m0_net_buffer_deregister(struct m0_net_buffer *buf, struct m0_net_domain *dom)
#define M0_FI_ENABLED(tag)
M0_INTERNAL void m0_rpc_item_sent_invoke(struct m0_rpc_item *item)
M0_INTERNAL void m0_rpc_machine_lock(struct m0_rpc_machine *machine)
struct m0_rpc_packet * rb_packet
static const struct m0_bob_type rpc_buffer_bob_type
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL int m0_net_buffer_add(struct m0_net_buffer *buf, struct m0_net_transfer_mc *tm)
m0_time_t m0_time_from_now(uint64_t secs, long ns)
struct m0_rpc_session * ri_session
static void item_fail(struct m0_rpc_packet *p, struct m0_rpc_item *item, int rc)
M0_INTERNAL void m0_rpc_packet_discard(struct m0_rpc_packet *packet)
struct m0_rpc_frm * rp_frm
#define for_each_item_in_packet(item, packet)
struct m0_rpc_stats rm_stats
struct m0_rpc_machine * ri_rmachine
M0_BOB_DEFINE(static, &rpc_buffer_bob_type, rpc_buffer)
M0_INTERNAL m0_bcount_t m0_rpc_max_seg_size(struct m0_net_domain *ndom)
static void rpc_buffer_fini(struct rpc_buffer *rpcbuf)
static int net_buffer_allocate(struct m0_net_buffer *netbuf, struct m0_net_domain *ndom, m0_bcount_t buf_size)
M0_INTERNAL void m0_rpc_session_release(struct m0_rpc_session *session)
M0_INTERNAL void m0_chan_broadcast(struct m0_chan *chan)
static void bufvec_geometry(struct m0_net_domain *ndom, m0_bcount_t buf_size, int32_t *out_nr_segments, m0_bcount_t *out_segment_size)
static uint64_t m0_align(uint64_t val, uint64_t alignment)
const struct m0_rpc_frm_ops m0_rpc_frm_default_ops
#define end_for_each_item_in_packet
struct m0_net_end_point * nb_ep
M0_INTERNAL const char * m0_rpc_item_remote_ep_addr(const struct m0_rpc_item *item)
int m0_nanosleep(const m0_time_t req, m0_time_t *rem)