]> git.baikalelectronics.ru Git - kernel.git/commit
tcp_cubic: do not set epoch_start in the future
authorEric Dumazet <edumazet@google.com>
Thu, 17 Sep 2015 15:38:00 +0000 (08:38 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Sep 2015 05:35:07 +0000 (22:35 -0700)
commitf673ad96f745ff06a1df401c6f1e6cf671d3adff
tree1987a3905af65d2acd350038e750203f7c69cc39
parent8dca7c35231d726838587c9f6e37df86aafebde1
tcp_cubic: do not set epoch_start in the future

Tracking idle time in bictcp_cwnd_event() is imprecise, as epoch_start
is normally set at ACK processing time, not at send time.

Doing a proper fix would need to add an additional state variable,
and does not seem worth the trouble, given CUBIC bug has been there
forever before Jana noticed it.

Let's simply not set epoch_start in the future, otherwise
bictcp_update() could overflow and CUBIC would again
grow cwnd too fast.

This was detected thanks to a packetdrill test Neal wrote that was flaky
before applying this fix.

Fixes: 718d9a09eb31 ("tcp_cubic: better follow cubic curve after idle period")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Cc: Jana Iyengar <jri@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_cubic.c