diff options
Diffstat (limited to 'net/ipv4/tcp_cong.c')
-rw-r--r-- | net/ipv4/tcp_cong.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index 4451750b478c..3a6be23d222f 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c | |||
@@ -274,6 +274,27 @@ int tcp_set_congestion_control(struct sock *sk, const char *name) | |||
274 | return err; | 274 | return err; |
275 | } | 275 | } |
276 | 276 | ||
277 | /* RFC2861 Check whether we are limited by application or congestion window | ||
278 | * This is the inverse of cwnd check in tcp_tso_should_defer | ||
279 | */ | ||
280 | int tcp_is_cwnd_limited(const struct sock *sk, u32 in_flight) | ||
281 | { | ||
282 | const struct tcp_sock *tp = tcp_sk(sk); | ||
283 | u32 left; | ||
284 | |||
285 | if (in_flight >= tp->snd_cwnd) | ||
286 | return 1; | ||
287 | |||
288 | if (!sk_can_gso(sk)) | ||
289 | return 0; | ||
290 | |||
291 | left = tp->snd_cwnd - in_flight; | ||
292 | if (sysctl_tcp_tso_win_divisor) | ||
293 | return left * sysctl_tcp_tso_win_divisor < tp->snd_cwnd; | ||
294 | else | ||
295 | return left <= tcp_max_burst(tp); | ||
296 | } | ||
297 | EXPORT_SYMBOL_GPL(tcp_is_cwnd_limited); | ||
277 | 298 | ||
278 | /* | 299 | /* |
279 | * Slow start is used when congestion window is less than slow start | 300 | * Slow start is used when congestion window is less than slow start |