From: Amir Vadai Date: Sun, 25 Apr 2010 08:55:29 +0000 (+0300) Subject: sdp: Fix a hang when ib_post_recv is failed X-Git-Tag: v4.1.12-92~264^2~5^2~193 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=b7f134a149188e73e5c4a7a03e9533d55a096896;p=users%2Fjedix%2Flinux-maple.git sdp: Fix a hang when ib_post_recv is failed Signed-off-by: Amir Vadai --- diff --git a/drivers/infiniband/ulp/sdp/sdp_rx.c b/drivers/infiniband/ulp/sdp/sdp_rx.c index 1e02a6d0928b..d4ac4aff364d 100644 --- a/drivers/infiniband/ulp/sdp/sdp_rx.c +++ b/drivers/infiniband/ulp/sdp/sdp_rx.c @@ -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)