From 3adee68c722597aaa78bff5ad4f4bc4809575772 Mon Sep 17 00:00:00 2001 From: Amir Vadai Date: Thu, 8 Jan 2009 13:00:16 +0200 Subject: [PATCH] SDP: BUG1309 - SDP close is slow + fix recv buffer initial size setting sdp_post_recv is called when the QP is closed. therefore it tries to post recv buffers without success till the socket is destructed. Signed-off-by: Amir Vadai --- drivers/infiniband/ulp/sdp/sdp_bcopy.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/ulp/sdp/sdp_bcopy.c b/drivers/infiniband/ulp/sdp/sdp_bcopy.c index 53e2d7ed0304..1288c68e632d 100644 --- a/drivers/infiniband/ulp/sdp/sdp_bcopy.c +++ b/drivers/infiniband/ulp/sdp/sdp_bcopy.c @@ -380,9 +380,13 @@ static void sdp_post_recv(struct sdp_sock *ssk) void sdp_post_recvs(struct sdp_sock *ssk) { + struct sock *sk = &ssk->isk.sk; int scale = ssk->rcvbuf_scale; - if (unlikely(!ssk->id)) + + if (unlikely(!ssk->id || ((1 << sk->sk_state) & + (TCPF_CLOSE | TCPF_TIME_WAIT)))) { return; + } if (top_mem_usage && (top_mem_usage * 0x100000) < atomic_read(&sdp_current_mem_usage) * PAGE_SIZE) @@ -391,8 +395,7 @@ void sdp_post_recvs(struct sdp_sock *ssk) while ((likely(ssk->rx_head - ssk->rx_tail < SDP_RX_SIZE) && (ssk->rx_head - ssk->rx_tail - SDP_MIN_BUFS) * (SDP_HEAD_SIZE + ssk->recv_frags * PAGE_SIZE) + - ssk->rcv_nxt - ssk->copied_seq < - ssk->isk.sk.sk_rcvbuf * scale) || + ssk->rcv_nxt - ssk->copied_seq < sk->sk_rcvbuf * scale) || unlikely(ssk->rx_head - ssk->rx_tail < SDP_MIN_BUFS)) sdp_post_recv(ssk); } @@ -595,6 +598,7 @@ int sdp_init_buffers(struct sdp_sock *ssk, u32 new_size) ssk->recv_frags = PAGE_ALIGN(new_size - SDP_HEAD_SIZE) / PAGE_SIZE; if (ssk->recv_frags > SDP_MAX_SEND_SKB_FRAGS) ssk->recv_frags = SDP_MAX_SEND_SKB_FRAGS; + ssk->rcvbuf_scale = rcvbuf_scale; sdp_post_recvs(ssk); -- 2.50.1