Lines Matching refs:inc

43 void rds_inc_init(struct rds_incoming *inc, struct rds_connection *conn,
46 refcount_set(&inc->i_refcount, 1);
47 INIT_LIST_HEAD(&inc->i_item);
48 inc->i_conn = conn;
49 inc->i_saddr = *saddr;
50 inc->i_usercopy.rdma_cookie = 0;
51 inc->i_usercopy.rx_tstamp = ktime_set(0, 0);
53 memset(inc->i_rx_lat_trace, 0, sizeof(inc->i_rx_lat_trace));
57 void rds_inc_path_init(struct rds_incoming *inc, struct rds_conn_path *cp,
60 refcount_set(&inc->i_refcount, 1);
61 INIT_LIST_HEAD(&inc->i_item);
62 inc->i_conn = cp->cp_conn;
63 inc->i_conn_path = cp;
64 inc->i_saddr = *saddr;
65 inc->i_usercopy.rdma_cookie = 0;
66 inc->i_usercopy.rx_tstamp = ktime_set(0, 0);
70 static void rds_inc_addref(struct rds_incoming *inc)
72 rdsdebug("addref inc %p ref %d\n", inc, refcount_read(&inc->i_refcount));
73 refcount_inc(&inc->i_refcount);
76 void rds_inc_put(struct rds_incoming *inc)
78 rdsdebug("put inc %p ref %d\n", inc, refcount_read(&inc->i_refcount));
79 if (refcount_dec_and_test(&inc->i_refcount)) {
80 BUG_ON(!list_empty(&inc->i_item));
82 inc->i_conn->c_trans->inc_free(inc);
165 static void rds_recv_incoming_exthdrs(struct rds_incoming *inc, struct rds_sock *rs)
167 struct rds_header *hdr = &inc->i_hdr;
189 inc->i_usercopy.rdma_cookie = rds_rdma_make_cookie(
284 struct rds_incoming *inc, gfp_t gfp)
291 inc->i_conn = conn;
292 inc->i_rx_jiffies = jiffies;
294 cp = inc->i_conn_path;
298 rdsdebug("conn %p next %llu inc %p seq %llu len %u sport %u dport %u "
301 inc,
302 (unsigned long long)be64_to_cpu(inc->i_hdr.h_sequence),
303 be32_to_cpu(inc->i_hdr.h_len),
304 be16_to_cpu(inc->i_hdr.h_sport),
305 be16_to_cpu(inc->i_hdr.h_dport),
306 inc->i_hdr.h_flags,
307 inc->i_rx_jiffies);
329 if (be64_to_cpu(inc->i_hdr.h_sequence) < cp->cp_next_rx_seq &&
330 (inc->i_hdr.h_flags & RDS_FLAG_RETRANSMITTED)) {
334 cp->cp_next_rx_seq = be64_to_cpu(inc->i_hdr.h_sequence) + 1;
336 if (rds_sysctl_ping_enable && inc->i_hdr.h_dport == 0) {
337 if (inc->i_hdr.h_sport == 0) {
343 rds_send_pong(cp, inc->i_hdr.h_sport);
345 if (RDS_HS_PROBE(be16_to_cpu(inc->i_hdr.h_sport),
346 be16_to_cpu(inc->i_hdr.h_dport))) {
347 rds_recv_hs_exthdrs(&inc->i_hdr, cp->cp_conn);
353 if (be16_to_cpu(inc->i_hdr.h_dport) == RDS_FLAG_PROBE_PORT &&
354 inc->i_hdr.h_sport == 0) {
355 rds_recv_hs_exthdrs(&inc->i_hdr, cp->cp_conn);
362 rs = rds_find_bound(daddr, inc->i_hdr.h_dport, conn->c_bound_if);
369 rds_recv_incoming_exthdrs(inc, rs);
377 rdsdebug("adding inc %p to rs %p's recv queue\n", inc, rs);
379 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
380 be32_to_cpu(inc->i_hdr.h_len),
381 inc->i_hdr.h_dport);
383 inc->i_usercopy.rx_tstamp = ktime_get_real();
384 rds_inc_addref(inc);
385 inc->i_rx_lat_trace[RDS_MSG_RX_END] = local_clock();
386 list_add_tail(&inc->i_item, &rs->rs_recv_queue);
403 static int rds_next_incoming(struct rds_sock *rs, struct rds_incoming **inc)
407 if (!*inc) {
410 *inc = list_entry(rs->rs_recv_queue.next,
413 rds_inc_addref(*inc);
418 return *inc != NULL;
421 static int rds_still_queued(struct rds_sock *rs, struct rds_incoming *inc,
429 if (!list_empty(&inc->i_item)) {
433 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
434 -be32_to_cpu(inc->i_hdr.h_len),
435 inc->i_hdr.h_dport);
436 list_del_init(&inc->i_item);
437 rds_inc_put(inc);
442 rdsdebug("inc %p rs %p still %d dropped %d\n", inc, rs, ret, drop);
539 static int rds_cmsg_recv(struct rds_incoming *inc, struct msghdr *msg,
544 if (inc->i_usercopy.rdma_cookie) {
546 sizeof(inc->i_usercopy.rdma_cookie),
547 &inc->i_usercopy.rdma_cookie);
552 if ((inc->i_usercopy.rx_tstamp != 0) &&
555 ns_to_kernel_old_timeval(inc->i_usercopy.rx_tstamp);
579 inc->i_rx_lat_trace[RDS_MSG_RX_CMSG] = local_clock();
584 t.rx_trace[i] = inc->i_rx_lat_trace[j + 1] -
585 inc->i_rx_lat_trace[j];
642 struct rds_incoming *inc = NULL;
666 if (!rds_next_incoming(rs, &inc)) {
677 rds_next_incoming(rs, &inc)), timeo);
678 rdsdebug("recvmsg woke inc %p timeo %ld\n", inc,
689 rdsdebug("copying inc %p from %pI6c:%u to user\n", inc,
690 &inc->i_conn->c_faddr,
691 ntohs(inc->i_hdr.h_sport));
692 ret = inc->i_conn->c_trans->inc_copy_to_user(inc, &msg->msg_iter);
701 if (!rds_still_queued(rs, inc, !(msg_flags & MSG_PEEK))) {
702 rds_inc_put(inc);
703 inc = NULL;
709 if (ret < be32_to_cpu(inc->i_hdr.h_len)) {
711 ret = be32_to_cpu(inc->i_hdr.h_len);
715 if (rds_cmsg_recv(inc, msg, rs)) {
724 if (ipv6_addr_v4mapped(&inc->i_saddr)) {
728 sin->sin_port = inc->i_hdr.h_sport;
730 inc->i_saddr.s6_addr32[3];
737 sin6->sin6_port = inc->i_hdr.h_sport;
738 sin6->sin6_addr = inc->i_saddr;
747 if (inc)
748 rds_inc_put(inc);
762 struct rds_incoming *inc, *tmp;
766 list_for_each_entry_safe(inc, tmp, &rs->rs_recv_queue, i_item) {
767 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
768 -be32_to_cpu(inc->i_hdr.h_len),
769 inc->i_hdr.h_dport);
770 list_del_init(&inc->i_item);
771 rds_inc_put(inc);
777 * inc->i_saddr isn't used here because it is only set in the receive
780 void rds_inc_info_copy(struct rds_incoming *inc,
786 minfo.seq = be64_to_cpu(inc->i_hdr.h_sequence);
787 minfo.len = be32_to_cpu(inc->i_hdr.h_len);
788 minfo.tos = inc->i_conn->c_tos;
793 minfo.lport = inc->i_hdr.h_dport;
794 minfo.fport = inc->i_hdr.h_sport;
798 minfo.lport = inc->i_hdr.h_sport;
799 minfo.fport = inc->i_hdr.h_dport;
808 void rds6_inc_info_copy(struct rds_incoming *inc,
815 minfo6.seq = be64_to_cpu(inc->i_hdr.h_sequence);
816 minfo6.len = be32_to_cpu(inc->i_hdr.h_len);
817 minfo6.tos = inc->i_conn->c_tos;
822 minfo6.lport = inc->i_hdr.h_dport;
823 minfo6.fport = inc->i_hdr.h_sport;
827 minfo6.lport = inc->i_hdr.h_sport;
828 minfo6.fport = inc->i_hdr.h_dport;