From ec3f55febf8e1dbfa84b643c1a6b6d95ef000233 Mon Sep 17 00:00:00 2001 From: Eldad Zinger Date: Sun, 1 Aug 2010 14:19:26 +0300 Subject: [PATCH] sdp: bug fix for a case of no memory to allocate for rx_sa Signed-off-by: Eldad Zinger --- drivers/infiniband/ulp/sdp/sdp_rx.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/infiniband/ulp/sdp/sdp_rx.c b/drivers/infiniband/ulp/sdp/sdp_rx.c index abe11e4a7dff..91389b44cd4b 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); -- 2.50.1