tp->snd_recover is part of the New Reno recovery algorithm, and should
only be checked if the system is currently performing New Reno style fast recovery. However, this value was being checked regardless of the NR state, with the end result being that the congestion window was never opened. Change the logic to check t_dupack instead; the only code path that allows it to be nonzero at this point is NewReno, so if it is nonzero, we are in fast recovery mode and should not touch the congestion window. Tested by: phk
This commit is contained in:
parent
048bdff41c
commit
88c9bb192d
@ -1935,7 +1935,12 @@ process_ACK:
|
||||
|
||||
if (cw > tp->snd_ssthresh)
|
||||
incr = incr * incr / cw;
|
||||
if (tcp_do_newreno == 0 || SEQ_GEQ(th->th_ack, tp->snd_recover))
|
||||
/*
|
||||
* If t_dupacks != 0 here, it indicates that we are still
|
||||
* in NewReno fast recovery mode, so we leave the congestion
|
||||
* window alone.
|
||||
*/
|
||||
if (tcp_do_newreno == 0 || tp->t_dupacks == 0)
|
||||
tp->snd_cwnd = min(cw + incr,TCP_MAXWIN<<tp->snd_scale);
|
||||
}
|
||||
if (acked > so->so_snd.sb_cc) {
|
||||
|
@ -1935,7 +1935,12 @@ process_ACK:
|
||||
|
||||
if (cw > tp->snd_ssthresh)
|
||||
incr = incr * incr / cw;
|
||||
if (tcp_do_newreno == 0 || SEQ_GEQ(th->th_ack, tp->snd_recover))
|
||||
/*
|
||||
* If t_dupacks != 0 here, it indicates that we are still
|
||||
* in NewReno fast recovery mode, so we leave the congestion
|
||||
* window alone.
|
||||
*/
|
||||
if (tcp_do_newreno == 0 || tp->t_dupacks == 0)
|
||||
tp->snd_cwnd = min(cw + incr,TCP_MAXWIN<<tp->snd_scale);
|
||||
}
|
||||
if (acked > so->so_snd.sb_cc) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user