]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: bug fix for a case of no memory to allocate for rx_sa
authorEldad Zinger <eldadz@mellanox.co.il>
Sun, 1 Aug 2010 11:19:26 +0000 (14:19 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:16 +0000 (05:05 -0700)
Signed-off-by: Eldad Zinger <eldadz@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_rx.c

index abe11e4a7dff921d8ed6544a5a031e6f83075103..91389b44cd4bccedb0609a6b624c94d0d367636f 100644 (file)
@@ -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);