Lines Matching refs:inc

41 void rds_inc_init(struct rds_incoming *inc, struct rds_connection *conn,
44 atomic_set(&inc->i_refcount, 1);
45 INIT_LIST_HEAD(&inc->i_item);
46 inc->i_conn = conn;
47 inc->i_saddr = saddr;
48 inc->i_rdma_cookie = 0;
52 static void rds_inc_addref(struct rds_incoming *inc)
54 rdsdebug("addref inc %p ref %d\n", inc, atomic_read(&inc->i_refcount));
55 atomic_inc(&inc->i_refcount);
58 void rds_inc_put(struct rds_incoming *inc)
60 rdsdebug("put inc %p ref %d\n", inc, atomic_read(&inc->i_refcount));
61 if (atomic_dec_and_test(&inc->i_refcount)) {
62 BUG_ON(!list_empty(&inc->i_item));
64 inc->i_conn->c_trans->inc_free(inc);
108 static void rds_recv_incoming_exthdrs(struct rds_incoming *inc, struct rds_sock *rs)
110 struct rds_header *hdr = &inc->i_hdr;
132 inc->i_rdma_cookie = rds_rdma_make_cookie(
158 struct rds_incoming *inc, gfp_t gfp)
164 inc->i_conn = conn;
165 inc->i_rx_jiffies = jiffies;
167 rdsdebug("conn %p next %llu inc %p seq %llu len %u sport %u dport %u "
170 inc,
171 (unsigned long long)be64_to_cpu(inc->i_hdr.h_sequence),
172 be32_to_cpu(inc->i_hdr.h_len),
173 be16_to_cpu(inc->i_hdr.h_sport),
174 be16_to_cpu(inc->i_hdr.h_dport),
175 inc->i_hdr.h_flags,
176 inc->i_rx_jiffies);
198 if (be64_to_cpu(inc->i_hdr.h_sequence) < conn->c_next_rx_seq &&
199 (inc->i_hdr.h_flags & RDS_FLAG_RETRANSMITTED)) {
203 conn->c_next_rx_seq = be64_to_cpu(inc->i_hdr.h_sequence) + 1;
205 if (rds_sysctl_ping_enable && inc->i_hdr.h_dport == 0) {
207 rds_send_pong(conn, inc->i_hdr.h_sport);
211 rs = rds_find_bound(daddr, inc->i_hdr.h_dport);
218 rds_recv_incoming_exthdrs(inc, rs);
226 rdsdebug("adding inc %p to rs %p's recv queue\n", inc, rs);
228 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
229 be32_to_cpu(inc->i_hdr.h_len),
230 inc->i_hdr.h_dport);
231 rds_inc_addref(inc);
232 list_add_tail(&inc->i_item, &rs->rs_recv_queue);
249 static int rds_next_incoming(struct rds_sock *rs, struct rds_incoming **inc)
253 if (!*inc) {
256 *inc = list_entry(rs->rs_recv_queue.next,
259 rds_inc_addref(*inc);
264 return *inc != NULL;
267 static int rds_still_queued(struct rds_sock *rs, struct rds_incoming *inc,
275 if (!list_empty(&inc->i_item)) {
279 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
280 -be32_to_cpu(inc->i_hdr.h_len),
281 inc->i_hdr.h_dport);
282 list_del_init(&inc->i_item);
283 rds_inc_put(inc);
288 rdsdebug("inc %p rs %p still %d dropped %d\n", inc, rs, ret, drop);
384 static int rds_cmsg_recv(struct rds_incoming *inc, struct msghdr *msg)
388 if (inc->i_rdma_cookie) {
390 sizeof(inc->i_rdma_cookie), &inc->i_rdma_cookie);
406 struct rds_incoming *inc = NULL;
428 if (!rds_next_incoming(rs, &inc)) {
437 rds_next_incoming(rs, &inc)), timeo);
438 rdsdebug("recvmsg woke inc %p timeo %ld\n", inc,
449 rdsdebug("copying inc %p from %pI4:%u to user\n", inc,
450 &inc->i_conn->c_faddr,
451 ntohs(inc->i_hdr.h_sport));
452 ret = inc->i_conn->c_trans->inc_copy_to_user(inc, msg->msg_iov,
462 if (!rds_still_queued(rs, inc, !(msg_flags & MSG_PEEK))) {
463 rds_inc_put(inc);
464 inc = NULL;
469 if (ret < be32_to_cpu(inc->i_hdr.h_len)) {
471 ret = be32_to_cpu(inc->i_hdr.h_len);
475 if (rds_cmsg_recv(inc, msg)) {
484 sin->sin_port = inc->i_hdr.h_sport;
485 sin->sin_addr.s_addr = inc->i_saddr;
492 if (inc)
493 rds_inc_put(inc);
507 struct rds_incoming *inc, *tmp;
511 list_for_each_entry_safe(inc, tmp, &rs->rs_recv_queue, i_item) {
512 rds_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong,
513 -be32_to_cpu(inc->i_hdr.h_len),
514 inc->i_hdr.h_dport);
515 list_del_init(&inc->i_item);
516 rds_inc_put(inc);
522 * inc->i_saddr isn't used here because it is only set in the receive
525 void rds_inc_info_copy(struct rds_incoming *inc,
531 minfo.seq = be64_to_cpu(inc->i_hdr.h_sequence);
532 minfo.len = be32_to_cpu(inc->i_hdr.h_len);
537 minfo.lport = inc->i_hdr.h_dport;
538 minfo.fport = inc->i_hdr.h_sport;
542 minfo.lport = inc->i_hdr.h_sport;
543 minfo.fport = inc->i_hdr.h_dport;