From: Eldad Zinger Date: Sun, 24 Oct 2010 09:16:56 +0000 (+0200) Subject: sdp: if can not allocate memory - no point of waiting X-Git-Tag: v4.1.12-92~264^2~5^2~73 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7fa4651227ba934ddde3dff573bb6b7fd1a1d050;p=users%2Fjedix%2Flinux-maple.git sdp: if can not allocate memory - no point of waiting We don't wake up sleeper when we free memory, so mem sleeper will sleep forever. Signed-off-by: Eldad Zinger --- diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index 32ff3f6572e0..d67e8d411c99 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -2022,8 +2022,10 @@ new_segment: } skb = sdp_alloc_skb_data(sk, min(seglen, size_goal), 0); - if (!skb) - goto wait_for_memory; + if (!skb) { + err = -ENOMEM; + goto do_error; + } BZCOPY_STATE(skb) = bz; @@ -2060,13 +2062,17 @@ new_segment: copy = (bz) ? sdp_bzcopy_get(sk, skb, from, copy, bz) : sdp_bcopy_get(sk, skb, from, copy); if (unlikely(copy < 0)) { - if (!++copy) - goto wait_for_memory; - if (!++copy) - goto new_segment; - if (!++copy) - goto do_fault; - goto do_error; + switch (copy) { + case SDP_DO_WAIT_MEM: + err = -ENOMEM; + goto do_error; + case SDP_NEW_SEG: + goto new_segment; + case SDP_ERR_FAULT: + goto do_fault; + default: + goto do_error; + } } if (!copied) @@ -2083,7 +2089,6 @@ new_segment: wait_for_sndbuf: set_bit(SOCK_NOSPACE, &sk->sk_socket->flags); -wait_for_memory: sdp_prf(sk, skb, "wait for mem. credits: %d", tx_credits(ssk)); SDPSTATS_COUNTER_INC(send_wait_for_mem); if (copied)