From: Michael S. Tsirkin Date: Sun, 17 Sep 2006 14:22:16 +0000 (+0300) Subject: IB/sdp: handle immediate errors on post_send/post_receive X-Git-Tag: v4.1.12-92~264^2~5^2~374 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=3bf281ea98e1b912320706c35fd69eff024d6c09;p=users%2Fjedix%2Flinux-maple.git IB/sdp: handle immediate errors on post_send/post_receive could happen if cma has moved the QP to error asynchronously Signed-off-by: Michael S. Tsirkin --- diff --git a/drivers/infiniband/ulp/sdp/sdp_bcopy.c b/drivers/infiniband/ulp/sdp/sdp_bcopy.c index ad7c6daf1e9d5..bbedba0deee1d 100644 --- a/drivers/infiniband/ulp/sdp/sdp_bcopy.c +++ b/drivers/infiniband/ulp/sdp/sdp_bcopy.c @@ -123,10 +123,14 @@ void sdp_post_send(struct sdp_sock *ssk, struct sk_buff *skb, u8 mid) if (unlikely(mid != SDP_MID_DATA)) ssk->tx_wr.send_flags |= IB_SEND_SOLICITED; rc = ib_post_send(ssk->qp, &ssk->tx_wr, &bad_wr); - BUG_ON(rc); ++ssk->tx_head; --ssk->bufs; ssk->remote_credits = ssk->rx_head - ssk->rx_tail; + if (unlikely(rc)) { + sdp_dbg(&ssk->isk.sk, "ib_post_send failed with status %d.\n", rc); + sdp_set_error(&ssk->isk.sk, -ECONNRESET); + wake_up(&ssk->wq); + } } struct sk_buff *sdp_send_completion(struct sdp_sock *ssk, int mseq) @@ -226,9 +230,11 @@ static void sdp_post_recv(struct sdp_sock *ssk) ssk->rx_wr.sg_list = ssk->ibsge; ssk->rx_wr.num_sge = frags + 1; rc = ib_post_recv(ssk->qp, &ssk->rx_wr, &bad_wr); - /* TODO */ - BUG_ON(rc); ++ssk->rx_head; + if (unlikely(rc)) { + sdp_dbg(&ssk->isk.sk, "ib_post_recv failed with status %d\n", rc); + sdp_reset(&ssk->isk.sk); + } } void sdp_post_recvs(struct sdp_sock *ssk)