diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 3fddc69ccccc..788851ca8c5d 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -89,6 +89,8 @@ int sysctl_tcp_frto __read_mostly = 2; | |||
89 | int sysctl_tcp_frto_response __read_mostly; | 89 | int sysctl_tcp_frto_response __read_mostly; |
90 | int sysctl_tcp_nometrics_save __read_mostly; | 90 | int sysctl_tcp_nometrics_save __read_mostly; |
91 | 91 | ||
92 | int sysctl_tcp_thin_dupack __read_mostly; | ||
93 | |||
92 | int sysctl_tcp_moderate_rcvbuf __read_mostly = 1; | 94 | int sysctl_tcp_moderate_rcvbuf __read_mostly = 1; |
93 | int sysctl_tcp_abc __read_mostly; | 95 | int sysctl_tcp_abc __read_mostly; |
94 | 96 | ||
@@ -2447,6 +2449,16 @@ static int tcp_time_to_recover(struct sock *sk) | |||
2447 | return 1; | 2449 | return 1; |
2448 | } | 2450 | } |
2449 | 2451 | ||
2452 | /* If a thin stream is detected, retransmit after first | ||
2453 | * received dupack. Employ only if SACK is supported in order | ||
2454 | * to avoid possible corner-case series of spurious retransmissions | ||
2455 | * Use only if there are no unsent data. | ||
2456 | */ | ||
2457 | if ((tp->thin_dupack || sysctl_tcp_thin_dupack) && | ||
2458 | tcp_stream_is_thin(tp) && tcp_dupack_heuristics(tp) > 1 && | ||
2459 | tcp_is_sack(tp) && !tcp_send_head(sk)) | ||
2460 | return 1; | ||
2461 | |||
2450 | return 0; | 2462 | return 0; |
2451 | } | 2463 | } |
2452 | 2464 | ||