aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv4/tcp_input.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index cb715eadf8f5..d894bbcc1d24 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2587,14 +2587,15 @@ static void tcp_conservative_spur_to_response(struct tcp_sock *tp)
*/
static void tcp_ratehalving_spur_to_response(struct sock *sk)
{
- struct tcp_sock *tp = tcp_sk(sk);
tcp_enter_cwr(sk, 0);
- tp->high_seq = tp->frto_highmark; /* Smoother w/o this? - ij */
}
-static void tcp_undo_spur_to_response(struct sock *sk)
+static void tcp_undo_spur_to_response(struct sock *sk, int flag)
{
- tcp_undo_cwr(sk, 1);
+ if (flag&FLAG_ECE)
+ tcp_ratehalving_spur_to_response(sk);
+ else
+ tcp_undo_cwr(sk, 1);
}
/* F-RTO spurious RTO detection algorithm (RFC4138)
@@ -2681,7 +2682,7 @@ static int tcp_process_frto(struct sock *sk, u32 prior_snd_una, int flag)
} else /* frto_counter == 2 */ {
switch (sysctl_tcp_frto_response) {
case 2:
- tcp_undo_spur_to_response(sk);
+ tcp_undo_spur_to_response(sk, flag);
break;
case 1:
tcp_conservative_spur_to_response(tp);