Browse Source

RDMA/cxgb4: Abort connections when moving to ERROR state

If a FINI operation fails, then we need to ABORT instead of CLOSE.
Also, if we ABORT due to unexpected STREAMING data, then wake up
anybody blocked in FINI...

Signed-off-by: Vipul Pandya <vipul@chelsio.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Vipul Pandya 12 years ago
parent
commit
91e9c07195
2 changed files with 2 additions and 0 deletions
  1. 1 0
      drivers/infiniband/hw/cxgb4/cm.c
  2. 1 0
      drivers/infiniband/hw/cxgb4/qp.c

+ 1 - 0
drivers/infiniband/hw/cxgb4/cm.c

@@ -1438,6 +1438,7 @@ static int abort_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
 	mutex_lock(&ep->com.mutex);
 	switch (ep->com.state) {
 	case ABORTING:
+		c4iw_wake_up(&ep->com.wr_wait, -ECONNRESET);
 		__state_set(&ep->com, DEAD);
 		release = 1;
 		break;

+ 1 - 0
drivers/infiniband/hw/cxgb4/qp.c

@@ -1383,6 +1383,7 @@ err:
 	qhp->ep = NULL;
 	set_state(qhp, C4IW_QP_STATE_ERROR);
 	free = 1;
+	abort = 1;
 	wake_up(&qhp->wait);
 	BUG_ON(!ep);
 	flush_qp(qhp);