Changeset View
Changeset View
Standalone View
Standalone View
sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c
Show First 20 Lines • Show All 379 Lines • ▼ Show 20 Lines | |||||
static void | static void | ||||
sdp_2msl_wait(struct sdp_sock *ssk) | sdp_2msl_wait(struct sdp_sock *ssk) | ||||
{ | { | ||||
SDP_WLOCK_ASSERT(ssk); | SDP_WLOCK_ASSERT(ssk); | ||||
ssk->flags |= SDP_TIMEWAIT; | ssk->flags |= SDP_TIMEWAIT; | ||||
ssk->state = TCPS_TIME_WAIT; | ssk->state = TCPS_TIME_WAIT; | ||||
soisdisconnected(ssk->socket); | soisdisconnected(ssk->socket); | ||||
callout_reset(&ssk->keep2msl, TCPTV_MSL, sdp_2msl_timeout, ssk); | callout_reset_sbt_on_arg1(&ssk->keep2msl, tick_sbt * TCPTV_MSL, 0, | ||||
sdp_2msl_timeout, ssk, sdp_2msl_timeout, -1, C_HARDCLOCK); | |||||
} | } | ||||
/* | /* | ||||
* Timed out waiting for the final fin/ack from rdma_disconnect(). | * Timed out waiting for the final fin/ack from rdma_disconnect(). | ||||
*/ | */ | ||||
static void | static void | ||||
sdp_dreq_timeout(void *data) | sdp_dreq_timeout(void *data) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 317 Lines • ▼ Show 20 Lines | sdp_usrclosed(struct sdp_sock *ssk) | ||||
} | } | ||||
} | } | ||||
static void | static void | ||||
sdp_output_disconnect(struct sdp_sock *ssk) | sdp_output_disconnect(struct sdp_sock *ssk) | ||||
{ | { | ||||
SDP_WLOCK_ASSERT(ssk); | SDP_WLOCK_ASSERT(ssk); | ||||
callout_reset(&ssk->keep2msl, SDP_FIN_WAIT_TIMEOUT, | callout_reset_sbt_on_arg1(&ssk->keep2msl, | ||||
sdp_dreq_timeout, ssk); | tick_sbt * SDP_FIN_WAIT_TIMEOUT, 0, | ||||
sdp_dreq_timeout, ssk, sdp_dreq_timeout, -1, C_HARDCLOCK); | |||||
ssk->flags |= SDP_NEEDFIN | SDP_DREQWAIT; | ssk->flags |= SDP_NEEDFIN | SDP_DREQWAIT; | ||||
sdp_post_sends(ssk, M_NOWAIT); | sdp_post_sends(ssk, M_NOWAIT); | ||||
} | } | ||||
/* | /* | ||||
* Initiate or continue a disconnect. | * Initiate or continue a disconnect. | ||||
* If embryonic state, just send reset (once). | * If embryonic state, just send reset (once). | ||||
* If in ``let data drain'' option and linger null, just drop. | * If in ``let data drain'' option and linger null, just drop. | ||||
▲ Show 20 Lines • Show All 858 Lines • ▼ Show 20 Lines | sdp_keepalive_timeout(void *data) | ||||
/* Callout rescheduled as a different kind of timer. */ | /* Callout rescheduled as a different kind of timer. */ | ||||
if (callout_pending(&ssk->keep2msl)) | if (callout_pending(&ssk->keep2msl)) | ||||
goto out; | goto out; | ||||
callout_deactivate(&ssk->keep2msl); | callout_deactivate(&ssk->keep2msl); | ||||
if (ssk->flags & SDP_DROPPED || | if (ssk->flags & SDP_DROPPED || | ||||
(ssk->socket->so_options & SO_KEEPALIVE) == 0) | (ssk->socket->so_options & SO_KEEPALIVE) == 0) | ||||
goto out; | goto out; | ||||
sdp_post_keepalive(ssk); | sdp_post_keepalive(ssk); | ||||
callout_reset(&ssk->keep2msl, SDP_KEEPALIVE_TIME, | callout_reset_sbt_on_arg1(&ssk->keep2msl, tick_sbt * SDP_KEEPALIVE_TIME, | ||||
sdp_keepalive_timeout, ssk); | 0, sdp_keepalive_timeout, ssk, sdp_keepalive_timeout, -1, | ||||
C_HARDCLOCK); | |||||
out: | out: | ||||
SDP_WUNLOCK(ssk); | SDP_WUNLOCK(ssk); | ||||
} | } | ||||
void | void | ||||
sdp_start_keepalive_timer(struct socket *so) | sdp_start_keepalive_timer(struct socket *so) | ||||
{ | { | ||||
struct sdp_sock *ssk; | struct sdp_sock *ssk; | ||||
ssk = sdp_sk(so); | ssk = sdp_sk(so); | ||||
if (!callout_pending(&ssk->keep2msl)) | if (!callout_pending(&ssk->keep2msl)) | ||||
callout_reset(&ssk->keep2msl, SDP_KEEPALIVE_TIME, | callout_reset_sbt_on_arg1(&ssk->keep2msl, | ||||
sdp_keepalive_timeout, ssk); | tick_sbt * SDP_KEEPALIVE_TIME, 0, | ||||
sdp_keepalive_timeout, ssk, sdp_keepalive_timeout, -1, | |||||
C_HARDCLOCK); | |||||
} | } | ||||
static void | static void | ||||
sdp_stop_keepalive_timer(struct socket *so) | sdp_stop_keepalive_timer(struct socket *so) | ||||
{ | { | ||||
struct sdp_sock *ssk; | struct sdp_sock *ssk; | ||||
ssk = sdp_sk(so); | ssk = sdp_sk(so); | ||||
▲ Show 20 Lines • Show All 346 Lines • Show Last 20 Lines |