Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c940587b authored by Xiaoliang (David) Wei's avatar Xiaoliang (David) Wei Committed by David S. Miller
Browse files

[TCP] vegas: Fix a bug in disabling slow start by gamma parameter.

TCP Vegas implementation has a bug in the process of disabling
slow-start with gamma parameter. The bug may lead to extreme
unfairness in the presence of early packet loss. See details in:
http://www.cs.caltech.edu/~weixl/technical/ns2linux/known_linux/index.html#vegas



Switch the order of "if (tp->snd_cwnd <= tp->snd_ssthresh)" statement
and "if (diff > gamma)" statement to eliminate the problem.

Signed-off-by: default avatarXiaoliang (David) Wei <davidwei79@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5c81833c
Loading
Loading
Loading
Loading
+18 −19
Original line number Diff line number Diff line
@@ -266,9 +266,7 @@ static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack,
			 */
			diff = (old_wnd << V_PARAM_SHIFT) - target_cwnd;

			if (tp->snd_cwnd <= tp->snd_ssthresh) {
				/* Slow start.  */
				if (diff > gamma) {
			if (diff > gamma && tp->snd_ssthresh > 2 ) {
				/* Going too fast. Time to slow down
				 * and switch to congestion avoidance.
				 */
@@ -285,7 +283,8 @@ static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack,
						   (target_cwnd >>
						    V_PARAM_SHIFT)+1);

				}
			} else if (tp->snd_cwnd <= tp->snd_ssthresh) {
				/* Slow start.  */
				tcp_slow_start(tp);
			} else {
				/* Congestion avoidance. */