Lines Matching refs:rs

85 rdsv3_recv_rcvbuf_delta(struct rdsv3_sock *rs, struct rsock *sk,  in rdsv3_recv_rcvbuf_delta()  argument
93 rs, map, delta, port); in rdsv3_recv_rcvbuf_delta()
98 rs->rs_rcv_bytes += delta; in rdsv3_recv_rcvbuf_delta()
99 now_congested = rs->rs_rcv_bytes > rdsv3_sk_rcvbuf(rs); in rdsv3_recv_rcvbuf_delta()
104 rs, NIPQUAD(rs->rs_bound_addr), in rdsv3_recv_rcvbuf_delta()
105 (int)ntohs(rs->rs_bound_port), rs->rs_rcv_bytes, in rdsv3_recv_rcvbuf_delta()
106 rdsv3_sk_rcvbuf(rs), now_congested, delta); in rdsv3_recv_rcvbuf_delta()
109 if (!rs->rs_congested && now_congested) { in rdsv3_recv_rcvbuf_delta()
110 rs->rs_congested = 1; in rdsv3_recv_rcvbuf_delta()
119 else if (rs->rs_congested && in rdsv3_recv_rcvbuf_delta()
120 (rs->rs_rcv_bytes < (rdsv3_sk_rcvbuf(rs)/2))) { in rdsv3_recv_rcvbuf_delta()
121 rs->rs_congested = 0; in rdsv3_recv_rcvbuf_delta()
128 RDSV3_DPRINTF4("rdsv3_recv_rcvbuf_delta", "Return(rs: %p)", rs); in rdsv3_recv_rcvbuf_delta()
135 rdsv3_recv_incoming_exthdrs(struct rdsv3_incoming *inc, struct rdsv3_sock *rs) in rdsv3_recv_incoming_exthdrs() argument
155 rdsv3_rdma_unuse(rs, ntohl(buffer.rdma.h_rdma_rkey), in rdsv3_recv_incoming_exthdrs()
195 struct rdsv3_sock *rs = NULL; in rdsv3_recv_incoming() local
246 rs = rdsv3_find_bound(conn, inc->i_hdr.h_dport); in rdsv3_recv_incoming()
247 if (!rs) { in rdsv3_recv_incoming()
253 rdsv3_recv_incoming_exthdrs(inc, rs); in rdsv3_recv_incoming()
256 sk = rdsv3_rs_to_sk(rs); in rdsv3_recv_incoming()
259 rw_enter(&rs->rs_recv_lock, RW_WRITER); in rdsv3_recv_incoming()
263 "adding inc %p to rs %p's recv queue", inc, rs); in rdsv3_recv_incoming()
265 rdsv3_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong, in rdsv3_recv_incoming()
269 list_insert_tail(&rs->rs_recv_queue, inc); in rdsv3_recv_incoming()
270 bytes = rs->rs_rcv_bytes; in rdsv3_recv_incoming()
271 rw_exit(&rs->rs_recv_lock); in rdsv3_recv_incoming()
284 rw_exit(&rs->rs_recv_lock); in rdsv3_recv_incoming()
288 if (rs) in rdsv3_recv_incoming()
289 rdsv3_sock_put(rs); in rdsv3_recv_incoming()
297 rdsv3_next_incoming(struct rdsv3_sock *rs, struct rdsv3_incoming **inc) in rdsv3_next_incoming() argument
300 rw_enter(&rs->rs_recv_lock, RW_READER); in rdsv3_next_incoming()
301 if (!list_is_empty(&rs->rs_recv_queue)) { in rdsv3_next_incoming()
302 *inc = list_head(&rs->rs_recv_queue); in rdsv3_next_incoming()
305 rw_exit(&rs->rs_recv_lock); in rdsv3_next_incoming()
312 rdsv3_still_queued(struct rdsv3_sock *rs, struct rdsv3_incoming *inc, in rdsv3_still_queued() argument
315 struct rsock *sk = rdsv3_rs_to_sk(rs); in rdsv3_still_queued()
319 rs, inc, drop); in rdsv3_still_queued()
321 rw_enter(&rs->rs_recv_lock, RW_WRITER); in rdsv3_still_queued()
326 rdsv3_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong, in rdsv3_still_queued()
333 rw_exit(&rs->rs_recv_lock); in rdsv3_still_queued()
336 "inc %p rs %p still %d dropped %d", inc, rs, ret, drop); in rdsv3_still_queued()
345 rdsv3_notify_queue_get(struct rdsv3_sock *rs, struct msghdr *msghdr) in rdsv3_notify_queue_get() argument
353 RDSV3_DPRINTF4("rdsv3_notify_queue_get", "Enter(rs: %p)", rs); in rdsv3_notify_queue_get()
377 mutex_enter(&rs->rs_lock); in rdsv3_notify_queue_get()
378 while (!list_is_empty(&rs->rs_notify_queue) && count < max_messages) { in rdsv3_notify_queue_get()
379 notifier = list_remove_head(&rs->rs_notify_queue); in rdsv3_notify_queue_get()
383 mutex_exit(&rs->rs_lock); in rdsv3_notify_queue_get()
410 mutex_enter(&rs->rs_lock); in rdsv3_notify_queue_get()
411 list_splice(&copy, &rs->rs_notify_queue); in rdsv3_notify_queue_get()
412 mutex_exit(&rs->rs_lock); in rdsv3_notify_queue_get()
415 RDSV3_DPRINTF4("rdsv3_notify_queue_get", "Return(rs: %p)", rs); in rdsv3_notify_queue_get()
424 rdsv3_notify_cong(struct rdsv3_sock *rs, struct msghdr *msghdr) in rdsv3_notify_cong() argument
426 uint64_t notify = rs->rs_cong_notify; in rdsv3_notify_cong()
434 mutex_enter(&rs->rs_lock); in rdsv3_notify_cong()
435 rs->rs_cong_notify &= ~notify; in rdsv3_notify_cong()
436 mutex_exit(&rs->rs_lock); in rdsv3_notify_cong()
456 rdsv3_recvmsg(struct rdsv3_sock *rs, uio_t *uio, in rdsv3_recvmsg() argument
459 struct rsock *sk = rdsv3_rs_to_sk(rs); in rdsv3_recvmsg()
466 "Enter(rs: %p size: %d msg_flags: 0x%x)", rs, size, msg_flags); in rdsv3_recvmsg()
485 if (!list_is_empty(&rs->rs_notify_queue)) { in rdsv3_recvmsg()
486 ret = rdsv3_notify_queue_get(rs, msg); in rdsv3_recvmsg()
502 if (rs->rs_cong_notify) { in rdsv3_recvmsg()
503 ret = rdsv3_notify_cong(rs, msg); in rdsv3_recvmsg()
507 if (!rdsv3_next_incoming(rs, &inc)) { in rdsv3_recvmsg()
514 "Before wait (rs: %p)", rs); in rdsv3_recvmsg()
518 !(list_is_empty(&rs->rs_notify_queue) && in rdsv3_recvmsg()
519 !rs->rs_cong_notify && in rdsv3_recvmsg()
520 !rdsv3_next_incoming(rs, &inc))); in rdsv3_recvmsg()
530 while ((list_is_empty(&rs->rs_notify_queue) && in rdsv3_recvmsg()
531 !rs->rs_cong_notify && in rdsv3_recvmsg()
532 !rdsv3_next_incoming(rs, &inc))) { in rdsv3_recvmsg()
549 rs, inc, -ret); in rdsv3_recvmsg()
575 if (!rdsv3_still_queued(rs, inc, !(msg_flags & MSG_PEEK))) { in rdsv3_recvmsg()
615 RDSV3_DPRINTF4("rdsv3_recvmsg", "Return(rs: %p, ret: %d)", rs, ret); in rdsv3_recvmsg()
626 rdsv3_clear_recv_queue(struct rdsv3_sock *rs) in rdsv3_clear_recv_queue() argument
628 struct rsock *sk = rdsv3_rs_to_sk(rs); in rdsv3_clear_recv_queue()
631 RDSV3_DPRINTF4("rdsv3_clear_recv_queue", "Enter(rs: %p)", rs); in rdsv3_clear_recv_queue()
633 rw_enter(&rs->rs_recv_lock, RW_WRITER); in rdsv3_clear_recv_queue()
634 RDSV3_FOR_EACH_LIST_NODE_SAFE(inc, tmp, &rs->rs_recv_queue, i_item) { in rdsv3_clear_recv_queue()
635 rdsv3_recv_rcvbuf_delta(rs, sk, inc->i_conn->c_lcong, in rdsv3_clear_recv_queue()
641 rw_exit(&rs->rs_recv_lock); in rdsv3_clear_recv_queue()
643 RDSV3_DPRINTF4("rdsv3_clear_recv_queue", "Return(rs: %p)", rs); in rdsv3_clear_recv_queue()