From: Florian Westphal <f...@strlen.de> Date: Fri, 28 Oct 2016 18:43:11 +0200
> If a congestion control module doesn't provide .undo_cwnd function, > tcp_undo_cwnd_reduction() will set cwnd to > > tp->snd_cwnd = max(tp->snd_cwnd, tp->snd_ssthresh << 1); > > ... which makes sense for reno (it sets ssthresh to half the current cwnd), > but it makes no sense for dctcp, which sets ssthresh based on the current > congestion estimate. > > This can cause severe growth of cwnd (eventually overflowing u32). > > Fix this by saving last cwnd on loss and restore cwnd based on that, > similar to cubic and other algorithms. > > Fixes: e3118e8359bb7c ("net: tcp: add DCTCP congestion control algorithm") > Cc: Lawrence Brakmo <bra...@fb.com> > Cc: Andrew Shewmaker <ags...@gmail.com> > Cc: Glenn Judd <glenn.j...@morganstanley.com> > Acked-by: Daniel Borkmann <dan...@iogearbox.net> > Signed-off-by: Florian Westphal <f...@strlen.de> Applied and queued up for -stable, thanks Florian.