From 00d044694271c0ca736e8b636a473cc713e5fafb Mon Sep 17 00:00:00 2001 From: Daikichi Osuga Date: Tue, 29 Aug 2006 02:01:44 -0700 Subject: [PATCH] --- yaml --- r: 33687 b: refs/heads/master c: 3fdf3f0c99e90e167f0d0643fcc8739e27456697 h: refs/heads/master i: 33685: f591c81c7fcfa8cc2587a17923b8e3ddd91f77de 33683: d48094582f8e9dd0fee5f0a6a497c3a6ecbbb241 33679: 19e4849e07d8370a7b77687e31097cafff652939 v: v3 --- [refs] | 2 +- trunk/net/ipv4/tcp_cong.c | 2 +- trunk/net/ipv4/tcp_input.c | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index fea69cf2347c..2064d0dc8a38 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 76d0cc1b64e1686b2b53e081c94142dd99f01ec5 +refs/heads/master: 3fdf3f0c99e90e167f0d0643fcc8739e27456697 diff --git a/trunk/net/ipv4/tcp_cong.c b/trunk/net/ipv4/tcp_cong.c index 5765f9d03174..7ff2e4273a7c 100644 --- a/trunk/net/ipv4/tcp_cong.c +++ b/trunk/net/ipv4/tcp_cong.c @@ -189,7 +189,7 @@ void tcp_slow_start(struct tcp_sock *tp) return; /* We MAY increase by 2 if discovered delayed ack */ - if (sysctl_tcp_abc > 1 && tp->bytes_acked > 2*tp->mss_cache) { + if (sysctl_tcp_abc > 1 && tp->bytes_acked >= 2*tp->mss_cache) { if (tp->snd_cwnd < tp->snd_cwnd_clamp) tp->snd_cwnd++; } diff --git a/trunk/net/ipv4/tcp_input.c b/trunk/net/ipv4/tcp_input.c index 104af5d5bcbc..111ff39a08c5 100644 --- a/trunk/net/ipv4/tcp_input.c +++ b/trunk/net/ipv4/tcp_input.c @@ -2505,8 +2505,13 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag) if (before(ack, prior_snd_una)) goto old_ack; - if (sysctl_tcp_abc && icsk->icsk_ca_state < TCP_CA_CWR) - tp->bytes_acked += ack - prior_snd_una; + if (sysctl_tcp_abc) { + if (icsk->icsk_ca_state < TCP_CA_CWR) + tp->bytes_acked += ack - prior_snd_una; + else if (icsk->icsk_ca_state == TCP_CA_Loss) + /* we assume just one segment left network */ + tp->bytes_acked += min(ack - prior_snd_una, tp->mss_cache); + } if (!(flag&FLAG_SLOWPATH) && after(ack, prior_snd_una)) { /* Window is constant, pure forward advance.