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:
jlemon 2000-11-04 15:59:39 +00:00
parent 048bdff41c
commit 88c9bb192d
2 changed files with 12 additions and 2 deletions

View File

@ -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) {

View File

@ -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) {