diff options
Diffstat (limited to 'net/ipv4/tcp_cong.c')
| -rw-r--r-- | net/ipv4/tcp_cong.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index bbf2d6624e89..c7cc62c8dc12 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c | |||
| @@ -186,24 +186,32 @@ void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 rtt, u32 in_flight, | |||
| 186 | { | 186 | { |
| 187 | struct tcp_sock *tp = tcp_sk(sk); | 187 | struct tcp_sock *tp = tcp_sk(sk); |
| 188 | 188 | ||
| 189 | if (in_flight < tp->snd_cwnd) | 189 | if (!tcp_is_cwnd_limited(sk, in_flight)) |
| 190 | return; | 190 | return; |
| 191 | 191 | ||
| 192 | if (tp->snd_cwnd <= tp->snd_ssthresh) { | 192 | /* In "safe" area, increase. */ |
| 193 | /* In "safe" area, increase. */ | 193 | if (tp->snd_cwnd <= tp->snd_ssthresh) |
| 194 | if (tp->snd_cwnd < tp->snd_cwnd_clamp) | 194 | tcp_slow_start(tp); |
| 195 | tp->snd_cwnd++; | 195 | |
| 196 | } else { | 196 | /* In dangerous area, increase slowly. */ |
| 197 | /* In dangerous area, increase slowly. | 197 | else if (sysctl_tcp_abc) { |
| 198 | * In theory this is tp->snd_cwnd += 1 / tp->snd_cwnd | 198 | /* RFC3465: Apppriate Byte Count |
| 199 | */ | 199 | * increase once for each full cwnd acked |
| 200 | if (tp->snd_cwnd_cnt >= tp->snd_cwnd) { | 200 | */ |
| 201 | if (tp->snd_cwnd < tp->snd_cwnd_clamp) | 201 | if (tp->bytes_acked >= tp->snd_cwnd*tp->mss_cache) { |
| 202 | tp->snd_cwnd++; | 202 | tp->bytes_acked -= tp->snd_cwnd*tp->mss_cache; |
| 203 | tp->snd_cwnd_cnt = 0; | 203 | if (tp->snd_cwnd < tp->snd_cwnd_clamp) |
| 204 | } else | 204 | tp->snd_cwnd++; |
| 205 | tp->snd_cwnd_cnt++; | 205 | } |
| 206 | } | 206 | } else { |
| 207 | /* In theory this is tp->snd_cwnd += 1 / tp->snd_cwnd */ | ||
| 208 | if (tp->snd_cwnd_cnt >= tp->snd_cwnd) { | ||
| 209 | if (tp->snd_cwnd < tp->snd_cwnd_clamp) | ||
| 210 | tp->snd_cwnd++; | ||
| 211 | tp->snd_cwnd_cnt = 0; | ||
| 212 | } else | ||
| 213 | tp->snd_cwnd_cnt++; | ||
| 214 | } | ||
| 207 | } | 215 | } |
| 208 | EXPORT_SYMBOL_GPL(tcp_reno_cong_avoid); | 216 | EXPORT_SYMBOL_GPL(tcp_reno_cong_avoid); |
| 209 | 217 | ||
