diff options
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/tcp_input.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 0f0c1c9829a1..094f8fafaf53 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -3003,17 +3003,13 @@ static int tcp_process_frto(struct sock *sk, int flag) | |||
3003 | } | 3003 | } |
3004 | 3004 | ||
3005 | if (tp->frto_counter == 1) { | 3005 | if (tp->frto_counter == 1) { |
3006 | /* Sending of the next skb must be allowed or no F-RTO */ | 3006 | /* tcp_may_send_now needs to see updated state */ |
3007 | if (!tcp_send_head(sk) || | ||
3008 | after(TCP_SKB_CB(tcp_send_head(sk))->end_seq, | ||
3009 | tp->snd_una + tp->snd_wnd)) { | ||
3010 | tcp_enter_frto_loss(sk, (tp->frto_counter == 1 ? 2 : 3), | ||
3011 | flag); | ||
3012 | return 1; | ||
3013 | } | ||
3014 | |||
3015 | tp->snd_cwnd = tcp_packets_in_flight(tp) + 2; | 3007 | tp->snd_cwnd = tcp_packets_in_flight(tp) + 2; |
3016 | tp->frto_counter = 2; | 3008 | tp->frto_counter = 2; |
3009 | |||
3010 | if (!tcp_may_send_now(sk)) | ||
3011 | tcp_enter_frto_loss(sk, 2, flag); | ||
3012 | |||
3017 | return 1; | 3013 | return 1; |
3018 | } else { | 3014 | } else { |
3019 | switch (sysctl_tcp_frto_response) { | 3015 | switch (sysctl_tcp_frto_response) { |