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>
This commit is contained in:
Vipul Pandya 2013-01-07 13:11:51 +00:00 committed by Roland Dreier
parent 55abf8df0a
commit 91e9c07195
2 changed files with 2 additions and 0 deletions

View File

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

View File

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