diff options
author | Steve Wise <swise@opengridcomputing.com> | 2011-06-14 20:59:27 +0000 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2011-06-17 11:54:56 -0700 |
commit | 8da7e7a55231543b84ac84e93ad5ca9d340773d7 (patch) | |
tree | 4f1b15e211a42879b18353b5f2f8c0d164250c7c /drivers/infiniband/hw/cxgb4/qp.c | |
parent | 301c2c3f039a1f9478f6cbef60f2ccd4da9bd4a1 (diff) |
RDMA/cxgb4: Couple of abort fixes
- fix a race where the driver could end up sending a close_con_req
after an abort_rpl. In c4iw_ep_disconnect(), send abort or close
request with the ep mutex held.
- fix a hang where driver fails to wake up when a connection is reset
during a normal close. Wake up any waiters in the interrupt path,
and correctly cleanup after rdma_fini() failures.
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw/cxgb4/qp.c')
-rw-r--r-- | drivers/infiniband/hw/cxgb4/qp.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c index 3b773b05a89..a41578e48c7 100644 --- a/drivers/infiniband/hw/cxgb4/qp.c +++ b/drivers/infiniband/hw/cxgb4/qp.c @@ -1207,11 +1207,8 @@ int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp, c4iw_get_ep(&qhp->ep->com); } ret = rdma_fini(rhp, qhp, ep); - if (ret) { - if (internal) - c4iw_get_ep(&qhp->ep->com); + if (ret) goto err; - } break; case C4IW_QP_STATE_TERMINATE: set_state(qhp, C4IW_QP_STATE_TERMINATE); |