aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>2007-10-11 20:32:31 -0400
committerDavid S. Miller <davem@davemloft.net>2007-10-11 20:32:31 -0400
commit16e906812f885cf16d95577dba260db6375ba571 (patch)
treeaddc7dc23792f74d2b5105197e51aa88cbe6a0fb
parent4953f0fcc06a125f87874743d968c0e185c8b296 (diff)
[TCP]: Add bytes_acked (ABC) clearing to FRTO too
I was reading tcp_enter_loss while looking for Cedric's bug and noticed bytes_acked adjustment is missing from FRTO side. Since bytes_acked will only be used in tcp_cong_avoid, I think it's safe to assume RTO would be spurious. During FRTO cwnd will be not controlled by tcp_cong_avoid and if FRTO calls for conventional recovery, cwnd is adjusted and the result of wrong assumption is cleared from bytes_acked. If RTO was in fact spurious, we did normal ABC already and can continue without any additional adjustments. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/tcp_input.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 101054cb13e9..e40857e073b3 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -1687,6 +1687,7 @@ static void tcp_enter_frto_loss(struct sock *sk, int allowed_segments, int flag)
1687 tp->snd_cwnd_cnt = 0; 1687 tp->snd_cwnd_cnt = 0;
1688 tp->snd_cwnd_stamp = tcp_time_stamp; 1688 tp->snd_cwnd_stamp = tcp_time_stamp;
1689 tp->frto_counter = 0; 1689 tp->frto_counter = 0;
1690 tp->bytes_acked = 0;
1690 1691
1691 tp->reordering = min_t(unsigned int, tp->reordering, 1692 tp->reordering = min_t(unsigned int, tp->reordering,
1692 sysctl_tcp_reordering); 1693 sysctl_tcp_reordering);
@@ -2824,6 +2825,7 @@ static void tcp_conservative_spur_to_response(struct tcp_sock *tp)
2824{ 2825{
2825 tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh); 2826 tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh);
2826 tp->snd_cwnd_cnt = 0; 2827 tp->snd_cwnd_cnt = 0;
2828 tp->bytes_acked = 0;
2827 TCP_ECN_queue_cwr(tp); 2829 TCP_ECN_queue_cwr(tp);
2828 tcp_moderate_cwnd(tp); 2830 tcp_moderate_cwnd(tp);
2829} 2831}