diff options
author | Frank Zago <fzago@systemfabricworks.com> | 2009-12-09 13:51:36 -0800 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2009-12-09 13:51:36 -0800 |
commit | e5dec39474fac3458ad6a649eab8cabfc977ae87 (patch) | |
tree | 6997588067380f186f51f509e5e919e047f7d263 | |
parent | 9420269428b3dc80c98e52beac60a3976fbef7d2 (diff) | |
download | op-kernel-dev-e5dec39474fac3458ad6a649eab8cabfc977ae87.zip op-kernel-dev-e5dec39474fac3458ad6a649eab8cabfc977ae87.tar.gz |
RDMA/nes: In nes_post_send() always set bad_wr on error
On error, set bad_wr in nes_post_send(). 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>
-rw-r--r-- | drivers/infiniband/hw/nes/nes_verbs.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c index a680c42..25b52d2 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.c +++ b/drivers/infiniband/hw/nes/nes_verbs.c @@ -3386,8 +3386,10 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, wqe_count = 0; total_payload_length = 0; - 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); @@ -3498,6 +3500,9 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, break; } + if (err) + break; + if (ib_wr->send_flags & IB_SEND_SIGNALED) { wqe_misc |= NES_IWARP_SQ_WQE_SIGNALED_COMPL; } @@ -3522,6 +3527,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, spin_unlock_irqrestore(&nesqp->lock, flags); +out: if (err) *bad_wr = ib_wr; return err; |