diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-09-04 06:42:01 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-09-04 06:42:01 -0400 |
| commit | fc851fad00d7fa1bf4ac7034d9ba8041bf482d50 (patch) | |
| tree | 779a8b572d1701ef2c46755df751d9275650cdf4 /net/ipv4/tcp_input.c | |
| parent | 85cd7251b9112e3dabeac9fd3b175601ca607241 (diff) | |
| parent | f9bcda7760e1373615c9f6d9ce24209b0ab97de1 (diff) | |
Merge branch 'upstream' into pata-drivers
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 104af5d5bcb..111ff39a08c 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) 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. |
