diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2005-11-10 16:53:30 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-11-10 16:53:30 -0800 |
commit | f4805eded7d38c4e42bf473dc5eb2f34853beb06 (patch) | |
tree | 1f7e0e90642e775b4e8c2c47d84e2df8ce2de3c3 /net/ipv4/tcp_cong.c | |
parent | 6e6ece5dc6022e8086c565498d23511bbceda811 (diff) | |
download | linux-3.10-f4805eded7d38c4e42bf473dc5eb2f34853beb06.tar.gz linux-3.10-f4805eded7d38c4e42bf473dc5eb2f34853beb06.tar.bz2 linux-3.10-f4805eded7d38c4e42bf473dc5eb2f34853beb06.zip |
[TCP]: fix congestion window update when using TSO deferal
TCP peformance with TSO over networks with delay is awful.
On a 100Mbit link with 150ms delay, we get 4Mbits/sec with TSO and
50Mbits/sec without TSO.
The problem is with TSO, we intentionally do not keep the maximum
number of packets in flight to fill the window, we hold out to until
we can send a MSS chunk. But, we also don't update the congestion window
unless we have filled, as per RFC2861.
This patch replaces the check for the congestion window being full
with something smarter that accounts for TSO.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_cong.c')
-rw-r--r-- | net/ipv4/tcp_cong.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index bbf2d6624e8..0705b496c6b 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c @@ -186,7 +186,7 @@ void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 rtt, u32 in_flight, { struct tcp_sock *tp = tcp_sk(sk); - if (in_flight < tp->snd_cwnd) + if (!tcp_is_cwnd_limited(sk, in_flight)) return; if (tp->snd_cwnd <= tp->snd_ssthresh) { |