diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/tcp_cong.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 9 |
2 files changed, 8 insertions, 3 deletions
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index 5765f9d03174..7ff2e4273a7c 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c | |||
@@ -189,7 +189,7 @@ void tcp_slow_start(struct tcp_sock *tp) | |||
189 | return; | 189 | return; |
190 | 190 | ||
191 | /* We MAY increase by 2 if discovered delayed ack */ | 191 | /* We MAY increase by 2 if discovered delayed ack */ |
192 | if (sysctl_tcp_abc > 1 && tp->bytes_acked > 2*tp->mss_cache) { | 192 | if (sysctl_tcp_abc > 1 && tp->bytes_acked >= 2*tp->mss_cache) { |
193 | if (tp->snd_cwnd < tp->snd_cwnd_clamp) | 193 | if (tp->snd_cwnd < tp->snd_cwnd_clamp) |
194 | tp->snd_cwnd++; | 194 | tp->snd_cwnd++; |
195 | } | 195 | } |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 104af5d5bcbc..111ff39a08c5 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -2505,8 +2505,13 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag) | |||
2505 | if (before(ack, prior_snd_una)) | 2505 | if (before(ack, prior_snd_una)) |
2506 | goto old_ack; | 2506 | goto old_ack; |
2507 | 2507 | ||
2508 | if (sysctl_tcp_abc && icsk->icsk_ca_state < TCP_CA_CWR) | 2508 | if (sysctl_tcp_abc) { |
2509 | tp->bytes_acked += ack - prior_snd_una; | 2509 | if (icsk->icsk_ca_state < TCP_CA_CWR) |
2510 | tp->bytes_acked += ack - prior_snd_una; | ||
2511 | else if (icsk->icsk_ca_state == TCP_CA_Loss) | ||
2512 | /* we assume just one segment left network */ | ||
2513 | tp->bytes_acked += min(ack - prior_snd_una, tp->mss_cache); | ||
2514 | } | ||
2510 | 2515 | ||
2511 | if (!(flag&FLAG_SLOWPATH) && after(ack, prior_snd_una)) { | 2516 | if (!(flag&FLAG_SLOWPATH) && after(ack, prior_snd_una)) { |
2512 | /* Window is constant, pure forward advance. | 2517 | /* Window is constant, pure forward advance. |