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:
parent
9dec900c20
commit
88bc230dc6
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue