diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-10-30 12:02:50 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-10-30 12:02:50 +0000 |
commit | f7da0c44ca54a4a7a7288fb1562aa85cc4ec9058 (patch) | |
tree | a48520a40b0173733b67c8c4b506126c9a5db8b4 /sys | |
parent | f71b496ed7e5680b0f0e4a9da173613f1e0ab32c (diff) | |
download | FreeBSD-src-f7da0c44ca54a4a7a7288fb1562aa85cc4ec9058.zip FreeBSD-src-f7da0c44ca54a4a7a7288fb1562aa85cc4ec9058.tar.gz |
Correct a bug in TCP SACK that could result in wedging of the TCP stack
under high load: only set function state to loop and continuing sending
if there is no data left to send.
RELENG_5_3 candidate.
Feet provided: Peter Losher <Peter underscore Losher at isc dot org>
Diagnosed by: Aniel Hartmeier <daniel at benzedrine dot cx>
Submitted by: mohan <mohans at yahoo-inc dot com>
Diffstat (limited to 'sys')
-rw-r--r-- | sys/netinet/tcp_output.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c index 15bf0c0..2ad8ccb 100644 --- a/sys/netinet/tcp_output.c +++ b/sys/netinet/tcp_output.c @@ -231,12 +231,12 @@ again: tp->snd_recover - p->rxmit)); } else len = ((long)ulmin(cwin, p->end - p->rxmit)); - sack_rxmit = 1; - sendalot = 1; off = p->rxmit - tp->snd_una; KASSERT(off >= 0,("%s: sack block to the left of una : %d", __func__, off)); if (len > 0) { + sack_rxmit = 1; + sendalot = 1; tcpstat.tcps_sack_rexmits++; tcpstat.tcps_sack_rexmit_bytes += min(len, tp->t_maxseg); |