From: Eldad Zinger Date: Sun, 1 Aug 2010 11:19:26 +0000 (+0300) Subject: sdp: bug fix for a case of no memory to allocate for rx_sa X-Git-Tag: v4.1.12-92~264^2~5^2~124 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ec3f55febf8e1dbfa84b643c1a6b6d95ef000233;p=users%2Fjedix%2Flinux-maple.git sdp: bug fix for a case of no memory to allocate for rx_sa Signed-off-by: Eldad Zinger --- diff --git a/drivers/infiniband/ulp/sdp/sdp_rx.c b/drivers/infiniband/ulp/sdp/sdp_rx.c index abe11e4a7dff9..91389b44cd4bc 100644 --- a/drivers/infiniband/ulp/sdp/sdp_rx.c +++ b/drivers/infiniband/ulp/sdp/sdp_rx.c @@ -326,6 +326,12 @@ static inline struct sk_buff *sdp_sock_queue_rcv_skb(struct sock *sk, ssk->rx_sa = rx_sa = RX_SRCAVAIL_STATE(skb) = kzalloc( sizeof(struct rx_srcavail_state), GFP_ATOMIC); + if (unlikely(!rx_sa)) { + /* if there is no space, fall to BCopy. */ + sdp_dbg(sk, "Can't allocate memory for rx_sa\n"); + h->mid = SDP_MID_DATA; + goto mid_data; + } rx_sa->mseq = ntohl(h->mseq); rx_sa->len = skb_len = ntohl(srcah->len); @@ -344,6 +350,7 @@ static inline struct sk_buff *sdp_sock_queue_rcv_skb(struct sock *sk, sdp_dbg_data(sk, "queueing SrcAvail. skb_len = %d vaddr = %lld\n", skb_len, rx_sa->vaddr); } else { +mid_data: skb_len = skb->len; atomic_add(skb_len, &ssk->rcv_nxt);