aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorFrank Zago <fzago@systemfabricworks.com>2009-12-09 16:51:36 -0500
committerRoland Dreier <rolandd@cisco.com>2009-12-09 16:51:36 -0500
commit4293fdc115e1e4f83dcb9ec6cbd3a54c563835f0 (patch)
treed5e771ca5b1760aa1e0f4ed5eb2ad070d6d346f1 /drivers/infiniband
parente5dec39474fac3458ad6a649eab8cabfc977ae87 (diff)
RDMA/nes: In nes_post_recv() always set bad_wr on error
On error, set bad_wr in nes_post_recv(). Stop processing ib_wr queue when an error is detected. Signed-off-by: Frank Zago <fzago@systemfabricworks.com> Signed-off-by: Chien Tung <chien.tin.tung@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 25b52d2478a8..0b17c01bb9fa 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -3554,8 +3554,10 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
3554 u32 counter; 3554 u32 counter;
3555 u32 total_payload_length; 3555 u32 total_payload_length;
3556 3556
3557 if (nesqp->ibqp_state > IB_QPS_RTS) 3557 if (nesqp->ibqp_state > IB_QPS_RTS) {
3558 return -EINVAL; 3558 err = -EINVAL;
3559 goto out;
3560 }
3559 3561
3560 spin_lock_irqsave(&nesqp->lock, flags); 3562 spin_lock_irqsave(&nesqp->lock, flags);
3561 3563
@@ -3618,6 +3620,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
3618 3620
3619 spin_unlock_irqrestore(&nesqp->lock, flags); 3621 spin_unlock_irqrestore(&nesqp->lock, flags);
3620 3622
3623out:
3621 if (err) 3624 if (err)
3622 *bad_wr = ib_wr; 3625 *bad_wr = ib_wr;
3623 return err; 3626 return err;