diff options
| author | Yuchung Cheng <ycheng@google.com> | 2012-05-02 13:30:04 +0000 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-05-02 20:56:10 -0400 | 
| commit | 750ea2bafa55aaed208b2583470ecd7122225634 (patch) | |
| tree | 7656d7697566b0cecc7fbbdd8dbae288bca6d7e3 /net/ipv4/tcp_output.c | |
| parent | eed530b6c67624db3f2cf477bac7c4d005d8f7ba (diff) | |
| download | olio-linux-3.10-750ea2bafa55aaed208b2583470ecd7122225634.tar.xz olio-linux-3.10-750ea2bafa55aaed208b2583470ecd7122225634.zip  | |
tcp: early retransmit: delayed fast retransmit
Implementing the advanced early retransmit (sysctl_tcp_early_retrans==2).
Delays the fast retransmit by an interval of RTT/4. We borrow the
RTO timer to implement the delay. If we receive another ACK or send
a new packet, the timer is cancelled and restored to original RTO
value offset by time elapsed.  When the delayed-ER timer fires,
we enter fast recovery and perform fast retransmit.
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 5 | 
1 files changed, 2 insertions, 3 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 834e89fc541..d9473300992 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -78,9 +78,8 @@ static void tcp_event_new_data_sent(struct sock *sk, const struct sk_buff *skb)  		tp->frto_counter = 3;  	tp->packets_out += tcp_skb_pcount(skb); -	if (!prior_packets) -		inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, -					  inet_csk(sk)->icsk_rto, TCP_RTO_MAX); +	if (!prior_packets || tp->early_retrans_delayed) +		tcp_rearm_rto(sk);  }  /* SND.NXT, if window was not shrunk.  |