summaryrefslogtreecommitdiff
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorFrank Zago <fzago@systemfabricworks.com>2009-12-10 00:51:36 +0300
committerRoland Dreier <rolandd@cisco.com>2009-12-10 00:51:36 +0300
commit4293fdc115e1e4f83dcb9ec6cbd3a54c563835f0 (patch)
treed5e771ca5b1760aa1e0f4ed5eb2ad070d6d346f1 /drivers/infiniband
parente5dec39474fac3458ad6a649eab8cabfc977ae87 (diff)
downloadlinux-4293fdc115e1e4f83dcb9ec6cbd3a54c563835f0.tar.xz
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,
u32 counter;
u32 total_payload_length;
- if (nesqp->ibqp_state > IB_QPS_RTS)
- return -EINVAL;
+ if (nesqp->ibqp_state > IB_QPS_RTS) {
+ err = -EINVAL;
+ goto out;
+ }
spin_lock_irqsave(&nesqp->lock, flags);
@@ -3618,6 +3620,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
spin_unlock_irqrestore(&nesqp->lock, flags);
+out:
if (err)
*bad_wr = ib_wr;
return err;