Lines Matching refs:inc

44 void rds_inc_init(struct rds_incoming *inc, struct rds_connection *conn,
47 refcount_set(&inc->i_refcount, 1);
48 INIT_LIST_HEAD(&inc->i_item);
49 inc->i_conn = conn;
50 inc->i_saddr = *saddr;
51 inc->i_usercopy.rdma_cookie = 0;
52 inc->i_usercopy.rx_tstamp = ktime_set(0, 0);
54 memset(inc->i_rx_lat_trace, 0, sizeof(inc->i_rx_lat_trace));
58 void rds_inc_path_init(struct rds_incoming *inc, struct rds_conn_path *cp,
61 refcount_set(&inc->i_refcount, 1);
62 INIT_LIST_HEAD(&inc->i_item);
63 inc->i_conn = cp->cp_conn;
64 inc->i_conn_path = cp;
65 inc->i_saddr = *saddr;
66 inc->i_usercopy.rdma_cookie = 0;
67 inc->i_usercopy.rx_tstamp = ktime_set(0, 0);
71 static void rds_inc_addref(struct rds_incoming *inc)
73 rdsdebug("addref inc %p ref %d\n", inc, refcount_read(&inc->i_refcount));
74 refcount_inc(&inc->i_refcount);
77 void rds_inc_put(struct rds_incoming *inc)
79 rdsdebug("put inc %p ref %d\n", inc, refcount_read(&inc->i_refcount));
80 if (refcount_dec_and_test(&inc->i_refcount)) {
81 BUG_ON(!list_empty(&inc->i_item));
83 inc->i_conn->c_trans->inc_free(inc);
166 static void rds_recv_incoming_exthdrs(struct rds_incoming *inc, struct rds_sock *rs)
168 struct rds_header *hdr = &inc->i_hdr;
190 inc->i_usercopy.rdma_cookie = rds_rdma_make_cookie(
285 struct rds_incoming *inc, gfp_t gfp)
292 inc->i_conn = conn;
293 inc->i_rx_jiffies = jiffies;
295 cp = inc->i_conn_path;
299 rdsdebug("conn %p next %llu inc %p seq %llu len %u sport %u dport %u "
302 inc,
303 (unsigned long long)be64_to_cpu(inc->i_hdr.h_sequence),
304 be32_to_cpu(inc->i_hdr.h_len),
305 be16_to_cpu(inc->i_hdr.h_sport),
306 be16_to_cpu(inc->i_hdr.h_dport),
307 inc->i_hdr.h_flags,
308 inc->i_rx_jiffies);
330 if (be64_to_cpu(inc->i_hdr.h_sequence) < cp->cp_next_rx_seq &&
331 (inc->i_hdr.h_flags & RDS_FLAG_RETRANSMITTED)) {
335 cp->cp_next_rx_seq = be64_to_cpu(inc->i_hdr.h_sequence) + 1;
337 if (rds_sysctl_ping_enable && inc->i_hdr.h_dport == 0) {
338 if (inc->i_hdr.h_sport == 0) {
344 rds_send_pong(cp, inc->i_hdr.h_sport);
346 if (RDS_HS_PROBE(be16_to_cpu(inc->i_hdr.h_sport),
347 be16_to_cpu(inc->i_hdr.h_dport))) {
348 rds_recv_hs_exthdrs(&inc->i_hdr, cp->cp_conn);
354 if (be16_to_cpu(inc->i_hdr.h_dport) == RDS_FLAG_PROBE_PORT &&
355 inc->i_hdr.h_sport == 0) {
356 rds_recv_hs_exthdrs(&inc->i_hdr, cp->cp_conn);
363 rs = rds_find_bound(daddr, inc->i_hdr.h_dport, conn->c_bound_if);
370 rds_recv_incoming_exthdrs(inc, rs);
378 rdsdebug("adding inc %p to rs %p's recv queue\n", inc, rs);
380 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
381 be32_to_cpu(inc->i_hdr.h_len),
382 inc->i_hdr.h_dport);
384 inc->i_usercopy.rx_tstamp = ktime_get_real();
385 rds_inc_addref(inc);
386 inc->i_rx_lat_trace[RDS_MSG_RX_END] = local_clock();
387 list_add_tail(&inc->i_item, &rs->rs_recv_queue);
404 static int rds_next_incoming(struct rds_sock *rs, struct rds_incoming **inc)
408 if (!*inc) {
411 *inc = list_entry(rs->rs_recv_queue.next,
414 rds_inc_addref(*inc);
419 return *inc != NULL;
422 static int rds_still_queued(struct rds_sock *rs, struct rds_incoming *inc,
430 if (!list_empty(&inc->i_item)) {
434 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
435 -be32_to_cpu(inc->i_hdr.h_len),
436 inc->i_hdr.h_dport);
437 list_del_init(&inc->i_item);
438 rds_inc_put(inc);
443 rdsdebug("inc %p rs %p still %d dropped %d\n", inc, rs, ret, drop);
540 static int rds_cmsg_recv(struct rds_incoming *inc, struct msghdr *msg,
545 if (inc->i_usercopy.rdma_cookie) {
547 sizeof(inc->i_usercopy.rdma_cookie),
548 &inc->i_usercopy.rdma_cookie);
553 if ((inc->i_usercopy.rx_tstamp != 0) &&
556 ns_to_kernel_old_timeval(inc->i_usercopy.rx_tstamp);
580 inc->i_rx_lat_trace[RDS_MSG_RX_CMSG] = local_clock();
585 t.rx_trace[i] = inc->i_rx_lat_trace[j + 1] -
586 inc->i_rx_lat_trace[j];
643 struct rds_incoming *inc = NULL;
667 if (!rds_next_incoming(rs, &inc)) {
678 rds_next_incoming(rs, &inc)), timeo);
679 rdsdebug("recvmsg woke inc %p timeo %ld\n", inc,
690 rdsdebug("copying inc %p from %pI6c:%u to user\n", inc,
691 &inc->i_conn->c_faddr,
692 ntohs(inc->i_hdr.h_sport));
693 ret = inc->i_conn->c_trans->inc_copy_to_user(inc, &msg->msg_iter);
702 if (!rds_still_queued(rs, inc, !(msg_flags & MSG_PEEK))) {
703 rds_inc_put(inc);
704 inc = NULL;
710 if (ret < be32_to_cpu(inc->i_hdr.h_len)) {
712 ret = be32_to_cpu(inc->i_hdr.h_len);
716 if (rds_cmsg_recv(inc, msg, rs)) {
725 if (ipv6_addr_v4mapped(&inc->i_saddr)) {
727 sin->sin_port = inc->i_hdr.h_sport;
729 inc->i_saddr.s6_addr32[3];
734 sin6->sin6_port = inc->i_hdr.h_sport;
735 sin6->sin6_addr = inc->i_saddr;
744 if (inc)
745 rds_inc_put(inc);
759 struct rds_incoming *inc, *tmp;
763 list_for_each_entry_safe(inc, tmp, &rs->rs_recv_queue, i_item) {
764 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
765 -be32_to_cpu(inc->i_hdr.h_len),
766 inc->i_hdr.h_dport);
767 list_del_init(&inc->i_item);
768 rds_inc_put(inc);
774 * inc->i_saddr isn't used here because it is only set in the receive
777 void rds_inc_info_copy(struct rds_incoming *inc,
783 minfo.seq = be64_to_cpu(inc->i_hdr.h_sequence);
784 minfo.len = be32_to_cpu(inc->i_hdr.h_len);
785 minfo.tos = inc->i_conn->c_tos;
790 minfo.lport = inc->i_hdr.h_dport;
791 minfo.fport = inc->i_hdr.h_sport;
795 minfo.lport = inc->i_hdr.h_sport;
796 minfo.fport = inc->i_hdr.h_dport;
805 void rds6_inc_info_copy(struct rds_incoming *inc,
812 minfo6.seq = be64_to_cpu(inc->i_hdr.h_sequence);
813 minfo6.len = be32_to_cpu(inc->i_hdr.h_len);
814 minfo6.tos = inc->i_conn->c_tos;
819 minfo6.lport = inc->i_hdr.h_dport;
820 minfo6.fport = inc->i_hdr.h_sport;
824 minfo6.lport = inc->i_hdr.h_sport;
825 minfo6.fport = inc->i_hdr.h_dport;