tcp: tcp_vegas ssthresh bug fix
authorDoug Leith <doug.leith@nuim.ie>
Fri, 5 Dec 2008 01:17:18 +0000 (17:17 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 5 Dec 2008 01:17:18 +0000 (17:17 -0800)
This patch fixes a bug in tcp_vegas.c.  At the moment this code leaves
ssthresh untouched.  However, this means that the vegas congestion
control algorithm is effectively unable to reduce cwnd below the
ssthresh value (if the vegas update lowers the cwnd below ssthresh,
then slow start is activated to raise it back up).  One example where
this matters is when during slow start cwnd overshoots the link
capacity and a flow then exits slow start with ssthresh set to a value
above where congestion avoidance would like to adjust it.

Signed-off-by: Doug Leith <doug.leith@nuim.ie>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_vegas.c

index 14504dada1166d57f36f3f603c5fbe5fbd0bfc95..7cd22262de3af3fa0f2917eefaea885c068855ac 100644 (file)
@@ -326,6 +326,8 @@ static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, u32 in_flight)
                                tp->snd_cwnd = 2;
                        else if (tp->snd_cwnd > tp->snd_cwnd_clamp)
                                tp->snd_cwnd = tp->snd_cwnd_clamp;
+
+                       tp->snd_ssthresh = tcp_current_ssthresh(sk);
                }
 
                /* Wipe the slate clean for the next RTT. */