RDMA/iw_cxgb4: stop ep timer on close failure

In c4iw_ep_disconnect(), if we start the ep timer to begin a close,
but send_halfclose() fails, we need to stop the timer and send a CLOSE
event up to the IWCM before releasing the resources. Otherwise, we can
crash when the ep timer fires if the ep is referencing a previous instance
of the device. This can happen as part of adapter reset/recovery, for
instance.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Hariprasad S 2016-05-05 01:27:30 +05:30 committed by Doug Ledford
parent 9dec900c20
commit 88bc230dc6
1 changed files with 6 additions and 1 deletions

View File

@ -3467,8 +3467,13 @@ int c4iw_ep_disconnect(struct c4iw_ep *ep, int abrupt, gfp_t gfp)
set_bit(EP_DISC_CLOSE, &ep->com.history); set_bit(EP_DISC_CLOSE, &ep->com.history);
ret = send_halfclose(ep, gfp); ret = send_halfclose(ep, gfp);
} }
if (ret) if (ret) {
if (!abrupt) {
stop_ep_timer(ep);
close_complete_upcall(ep, -EIO);
}
fatal = 1; fatal = 1;
}
} }
mutex_unlock(&ep->com.mutex); mutex_unlock(&ep->com.mutex);
if (fatal) if (fatal)