summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2004-10-30 12:02:50 +0000
committerrwatson <rwatson@FreeBSD.org>2004-10-30 12:02:50 +0000
commitf7da0c44ca54a4a7a7288fb1562aa85cc4ec9058 (patch)
treea48520a40b0173733b67c8c4b506126c9a5db8b4 /sys/netinet
parentf71b496ed7e5680b0f0e4a9da173613f1e0ab32c (diff)
downloadFreeBSD-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/netinet')
-rw-r--r--sys/netinet/tcp_output.c4
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);
OpenPOWER on IntegriCloud