]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: Fix a hang when ib_post_recv is failed
authorAmir Vadai <amirv@mellanox.co.il>
Sun, 25 Apr 2010 08:55:29 +0000 (11:55 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:04:55 +0000 (05:04 -0700)
Signed-off-by: Amir Vadai <amirv@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_rx.c

index 1e02a6d0928b084a887103694f2363216ea2bf86..d4ac4aff364d5cc2f4442c36202847a64bf07a48 100644 (file)
@@ -158,7 +158,6 @@ static int sdp_post_recv(struct sdp_sock *ssk)
        struct sdp_bsdh *h;
        int id = ring_head(ssk->rx_ring);
        gfp_t gfp_page;
-       int ret = 0;
 
        /* Now, allocate and repost recv */
        /* TODO: allocate from cache */
@@ -221,21 +220,19 @@ static int sdp_post_recv(struct sdp_sock *ssk)
        rx_wr.sg_list = ibsge;
        rx_wr.num_sge = frags + 1;
        rc = ib_post_recv(ssk->qp, &rx_wr, &bad_wr);
-       atomic_inc(&ssk->rx_ring.head);
        if (unlikely(rc)) {
                sdp_warn(&ssk->isk.sk, "ib_post_recv failed. status %d\n", rc);
 
-               lock_sock(&ssk->isk.sk);
                sdp_reset(&ssk->isk.sk);
-               release_sock(&ssk->isk.sk);
 
-               ret = -1;
+               return -1;
        }
 
+       atomic_inc(&ssk->rx_ring.head);
        SDPSTATS_COUNTER_INC(post_recv);
        atomic_add(ssk->recv_frags, &sdp_current_mem_usage);
 
-       return ret;
+       return 0;
 }
 
 static inline int sdp_post_recvs_needed(struct sdp_sock *ssk)