diff options
author | Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> | 2007-10-11 20:32:31 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-10-11 20:32:31 -0400 |
commit | 16e906812f885cf16d95577dba260db6375ba571 (patch) | |
tree | addc7dc23792f74d2b5105197e51aa88cbe6a0fb /net | |
parent | 4953f0fcc06a125f87874743d968c0e185c8b296 (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>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/tcp_input.c | 2 |
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 | } |