diff options
author | Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> | 2007-05-19 13:56:57 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-05-19 13:56:57 -0700 |
commit | 580e572a4a1bfea2f42af63ba4785ac7dfbcb45d (patch) | |
tree | 0c28904f333818cfe86a6cf95cee8bff75eec0a7 /net | |
parent | 463236557db4b5d4de9eb3fafa2e7d7905ac65ab (diff) | |
download | op-kernel-dev-580e572a4a1bfea2f42af63ba4785ac7dfbcb45d.zip op-kernel-dev-580e572a4a1bfea2f42af63ba4785ac7dfbcb45d.tar.gz |
[TCP] FRTO: Prevent state inconsistency in corner cases
State could become inconsistent in two cases:
1) Userspace disabled FRTO by tuning sysctl when one of the TCP
flows was in the middle of FRTO algorithm (and then RTO is
again triggered)
2) SACK reneging occurs during FRTO algorithm
A simple solution is just to abort the previous FRTO when such
obscure condition occurs...
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 7ecdc89..38cb25b 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -1501,6 +1501,8 @@ void tcp_enter_loss(struct sock *sk, int how) tcp_set_ca_state(sk, TCP_CA_Loss); tp->high_seq = tp->snd_nxt; TCP_ECN_queue_cwr(tp); + /* Abort FRTO algorithm if one is in progress */ + tp->frto_counter = 0; clear_all_retrans_hints(tp); } |