aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>2007-02-22 02:06:52 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:23:09 -0400
commit52c63f1e86ebb18ef4b710b5b647e552a041e5ca (patch)
tree3df85c27c8ba1f5e22d058dd2a0cb1f6850de777 /net
parentaa8b6a7ad147dfbaaf10368ff15df9418b670d8b (diff)
[TCP]: Don't enter to fast recovery while using FRTO
Because TCP is not in Loss state during FRTO recovery, fast recovery could be triggered by accident. Non-SACK FRTO is more robust than not yet included SACK-enhanced version (that can receiver high number of duplicate ACKs with SACK blocks during FRTO), at least with unidirectional transfers, but under extraordinary patterns fast recovery can be incorrectly triggered, e.g., Data loss+ACK losses => cumulative ACK with enough SACK blocks to meet sacked_out >= dupthresh condition). 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.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 924b2e6d7d15..7213740477ee 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -1547,6 +1547,10 @@ static int tcp_time_to_recover(struct sock *sk, struct tcp_sock *tp)
1547{ 1547{
1548 __u32 packets_out; 1548 __u32 packets_out;
1549 1549
1550 /* Do not perform any recovery during FRTO algorithm */
1551 if (tp->frto_counter)
1552 return 0;
1553
1550 /* Trick#1: The loss is proven. */ 1554 /* Trick#1: The loss is proven. */
1551 if (tp->lost_out) 1555 if (tp->lost_out)
1552 return 1; 1556 return 1;