Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9efc223 authored by Vlad Yasevich's avatar Vlad Yasevich
Browse files

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: default avatarVlad Yasevich <vladislav.yasevich@hp.com>
parent ae19c548
Loading
Loading
Loading
Loading
+3 −12
Original line number Diff line number Diff line
@@ -659,14 +659,6 @@ redo:
			if (chunk->fast_retransmit == SCTP_NEED_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;
			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
				 * timer is running.
				 */
				sctp_transport_reset_timers(transport, 0);
				sctp_transport_reset_timers(transport);
			}
			break;

@@ -924,8 +916,7 @@ static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
						    rtx_timeout, &start_timer);

			if (start_timer)
				sctp_transport_reset_timers(transport,
							    start_timer-1);
				sctp_transport_reset_timers(transport);

			/* This can happen on COOKIE-ECHO resend.  Only
			 * 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,
				      &transport->transmitted);

			sctp_transport_reset_timers(transport, 0);
			sctp_transport_reset_timers(transport);

			q->empty = 0;

+2 −2
Original line number Diff line number Diff line
@@ -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
 * 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
	 *
@@ -205,7 +205,7 @@ void sctp_transport_reset_timers(struct sctp_transport *transport, int force)
	 * address.
	 */

	if (force || !timer_pending(&transport->T3_rtx_timer))
	if (!timer_pending(&transport->T3_rtx_timer))
		if (!mod_timer(&transport->T3_rtx_timer,
			       jiffies + transport->rto))
			sctp_transport_hold(transport);