sctp: Do not force T3 timer on fast retransmissions.
We don't need to force the T3 timer any more and it's actually wrong to do as it causes too long of a delay. The timer will be started if one is not running, but if one is running, we leave it alone. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
This commit is contained in:
parent
ae19c54866
commit
d9efc2231b
2 changed files with 5 additions and 14 deletions
|
@ -659,14 +659,6 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt,
|
||||||
if (chunk->fast_retransmit == SCTP_NEED_FRTX)
|
if (chunk->fast_retransmit == SCTP_NEED_FRTX)
|
||||||
chunk->fast_retransmit = SCTP_DONT_FRTX;
|
chunk->fast_retransmit = SCTP_DONT_FRTX;
|
||||||
|
|
||||||
/* Force start T3-rtx timer when fast retransmitting
|
|
||||||
* the earliest outstanding TSN
|
|
||||||
*/
|
|
||||||
if (!timer && fast_rtx &&
|
|
||||||
ntohl(chunk->subh.data_hdr->tsn) ==
|
|
||||||
asoc->ctsn_ack_point + 1)
|
|
||||||
timer = 2;
|
|
||||||
|
|
||||||
q->empty = 0;
|
q->empty = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -871,7 +863,7 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
|
||||||
* sender MUST assure that at least one T3-rtx
|
* sender MUST assure that at least one T3-rtx
|
||||||
* timer is running.
|
* timer is running.
|
||||||
*/
|
*/
|
||||||
sctp_transport_reset_timers(transport, 0);
|
sctp_transport_reset_timers(transport);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -924,8 +916,7 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
|
||||||
rtx_timeout, &start_timer);
|
rtx_timeout, &start_timer);
|
||||||
|
|
||||||
if (start_timer)
|
if (start_timer)
|
||||||
sctp_transport_reset_timers(transport,
|
sctp_transport_reset_timers(transport);
|
||||||
start_timer-1);
|
|
||||||
|
|
||||||
/* This can happen on COOKIE-ECHO resend. Only
|
/* This can happen on COOKIE-ECHO resend. Only
|
||||||
* one chunk can get bundled with a COOKIE-ECHO.
|
* one chunk can get bundled with a COOKIE-ECHO.
|
||||||
|
@ -1058,7 +1049,7 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
|
||||||
list_add_tail(&chunk->transmitted_list,
|
list_add_tail(&chunk->transmitted_list,
|
||||||
&transport->transmitted);
|
&transport->transmitted);
|
||||||
|
|
||||||
sctp_transport_reset_timers(transport, 0);
|
sctp_transport_reset_timers(transport);
|
||||||
|
|
||||||
q->empty = 0;
|
q->empty = 0;
|
||||||
|
|
||||||
|
|
|
@ -195,7 +195,7 @@ static void sctp_transport_destroy(struct sctp_transport *transport)
|
||||||
/* Start T3_rtx timer if it is not already running and update the heartbeat
|
/* Start T3_rtx timer if it is not already running and update the heartbeat
|
||||||
* timer. This routine is called every time a DATA chunk is sent.
|
* timer. This routine is called every time a DATA chunk is sent.
|
||||||
*/
|
*/
|
||||||
void sctp_transport_reset_timers(struct sctp_transport *transport, int force)
|
void sctp_transport_reset_timers(struct sctp_transport *transport)
|
||||||
{
|
{
|
||||||
/* RFC 2960 6.3.2 Retransmission Timer Rules
|
/* RFC 2960 6.3.2 Retransmission Timer Rules
|
||||||
*
|
*
|
||||||
|
@ -205,7 +205,7 @@ void sctp_transport_reset_timers(struct sctp_transport *transport, int force)
|
||||||
* address.
|
* address.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (force || !timer_pending(&transport->T3_rtx_timer))
|
if (!timer_pending(&transport->T3_rtx_timer))
|
||||||
if (!mod_timer(&transport->T3_rtx_timer,
|
if (!mod_timer(&transport->T3_rtx_timer,
|
||||||
jiffies + transport->rto))
|
jiffies + transport->rto))
|
||||||
sctp_transport_hold(transport);
|
sctp_transport_hold(transport);
|
||||||
|
|
Loading…
Reference in a new issue