freebsd-skq/sys
John Baldwin 672dc4aea2 TCP reuses t_rxtshift to determine the backoff timer used for both the
persist state and the retransmit timer.  However, the code that implements
"bad retransmit recovery" only checks t_rxtshift to see if an ACK has been
received in during the first retransmit timeout window.  As a result, if
ticks has wrapped over to a negative value and a socket is in the persist
state, it can incorrectly treat an ACK from the remote peer as a
"bad retransmit recovery" and restore saved values such as snd_ssthresh and
snd_cwnd.  However, if the socket has never had a retransmit timeout, then
these saved values will be zero, so snd_ssthresh and snd_cwnd will be set
to 0.

If the socket is in fast recovery (this can be caused by excessive
duplicate ACKs such as those fixed by 220794), then each ACK that arrives
triggers either NewReno or SACK partial ACK handling which clamps snd_cwnd
to be no larger than snd_ssthresh.  In effect, the socket's send window
is permamently stuck at 0 even though the remote peer is advertising a
much larger window and pending data is only sent via TCP window probes
(so one byte every few seconds).

Fix this by adding a new TCP pcb flag (TF_PREVVALID) that indicates that
the various snd_*_prev fields in the pcb are valid and only perform
"bad retransmit recovery" if this flag is set in the pcb.  The flag is set
on the first retransmit timeout that occurs and is cleared on subsequent
retransmit timeouts or when entering the persist state.

Reviewed by:	bz
MFC after:	2 weeks
2011-04-29 15:40:12 +00:00
..
amd64 Add urtw(4) 2011-04-29 06:36:39 +00:00
arm Fix build of this kernel config. The ath(4) bits need the 11n frame format 2011-04-29 14:01:49 +00:00
boot Due to space constraints, the UFS boot2 and boot1 use an evil hack where 2011-04-28 17:44:24 +00:00
bsm Add ECAPMODE, "Not permitted in capability mode", a new kernel errno 2011-03-01 13:14:28 +00:00
cam Make CAM_DEBUG_CDB also dump ATA commands in addition to SCSI. 2011-04-29 07:14:37 +00:00
cddl Fix copy-paste bug. 2011-04-27 04:03:04 +00:00
compat Regen. 2011-04-18 16:32:47 +00:00
conf Add urtw(4) 2011-04-29 06:36:39 +00:00
contrib Make pf compile without INET support by adding #ifdef INETs and 2011-04-27 19:34:01 +00:00
crypto Fix a bug in the result of manual assembly. 2011-03-02 14:56:58 +00:00
ddb Trim some additional unnecessary <linker_set.h> includes. 2011-04-28 17:59:33 +00:00
dev Remove some holdovers from the AR5212 origin of this code. 2011-04-29 12:52:18 +00:00
fs The build was broken by r221190 for 64bit arches like amd64. 2011-04-29 12:30:15 +00:00
gdb Modify kdb_trap() so that it re-calls the dbbe_trap function as long as 2011-02-18 22:25:11 +00:00
geom Implement relaxed comparision for hardcoded provider names to make it 2011-04-27 00:10:26 +00:00
gnu Fix typos - remove duplicate "the". 2011-02-21 09:01:34 +00:00
i386 Add urtw(4) 2011-04-29 06:36:39 +00:00
ia64 Add the watchdogs patting during the (shutdown time) disk syncing and 2011-04-28 16:02:05 +00:00
isa - Enable an extra debugging bootverbose printf when probing ISA PNP cards 2011-03-29 12:38:13 +00:00
kern Add the watchdogs patting during the (shutdown time) disk syncing and 2011-04-28 16:02:05 +00:00
kgssapi
libkern Fix typos - remove duplicate "is". 2011-02-23 09:22:33 +00:00
mips Tidy up the naming of the ip2 DDR flush routine, and add an inline 2011-04-29 06:25:11 +00:00
modules Exar driver for X3100 10GbE Server/Storage adapters 2011-04-28 14:33:15 +00:00
net Make various (pseudo) interfaces compile without INET in the kernel 2011-04-27 19:30:44 +00:00
net80211 We need in.h for both INET and INET6, as according to RFC 3493 it 2011-04-25 16:37:47 +00:00
netatalk
netgraph LibAliasInit() should allocate memory with M_WAITOK flag. Modify it 2011-04-18 20:07:08 +00:00
netinet TCP reuses t_rxtshift to determine the backoff timer used for both the 2011-04-29 15:40:12 +00:00
netinet6 Make IPsec compile without INET adding appropriate #ifdef checks. 2011-04-27 19:28:42 +00:00
netipsec Make IPsec compile without INET adding appropriate #ifdef checks. 2011-04-27 19:28:42 +00:00
netipx
netnatm
netncp
netsmb Change some variables from int to size_t. This is more accurate since 2011-01-08 23:06:54 +00:00
nfs Fix the experimental NFS client so that it does not bogusly 2011-04-25 22:22:51 +00:00
nfsclient Fix module names and dependencies so the NFS clients will 2011-04-27 20:42:30 +00:00
nfsserver Add some FEATURE macros for various features (AUDIT/CAM/IPC/KTR/MAC/NFS/NTP/ 2011-02-25 10:11:01 +00:00
nlm sysctl(9) cleanup checkpoint: amd64 GENERIC builds cleanly. 2011-01-12 19:54:19 +00:00
ofed - Catch up to falloc() changes. 2011-04-26 07:30:52 +00:00
opencrypto After the r219999 is merged to stable/8, rename fallocf(9) to falloc(9) 2011-04-01 13:28:34 +00:00
pc98 This patch changes head so that the default NFS client is now the new 2011-04-27 17:51:51 +00:00
pci Do a sweep of the tree replacing calls to pci_find_extcap() with calls to 2011-03-23 13:10:15 +00:00
powerpc Add the watchdogs patting during the (shutdown time) disk syncing and 2011-04-28 16:02:05 +00:00
rpc This patch is believed to fix a problem in the kernel rpc for 2011-04-27 18:19:26 +00:00
security - Add a FEATURE for capsicum (security_capabilities). 2011-03-04 09:03:54 +00:00
sparc64 This patch changes head so that the default NFS client is now the new 2011-04-27 17:51:51 +00:00
sun4v This patch changes head so that the default NFS client is now the new 2011-04-27 17:51:51 +00:00
sys - Add the possibility to reuse the already last used timeout when patting 2011-04-27 16:43:03 +00:00
teken Use proper bounds checking on VPA. 2010-12-05 10:15:23 +00:00
tools GNU awk does not output escaped newlines in multi-line printc statements. This 2011-03-31 21:33:33 +00:00
ufs VFS sometimes is unable to inactivate a vnode when vnode use count 2011-04-24 10:47:56 +00:00
vm Reap old SPL comments. 2011-04-26 22:18:53 +00:00
x86 Turn off periodic recalibration of CPU ticker frequency if it is invariant. 2011-04-28 17:56:02 +00:00
xdr
xen Fix a few more SYSCTL_PROC() that were missing a CTLFLAG type specifier. 2011-01-19 00:57:58 +00:00
Makefile Add lex and yacc sources to things cscope'd. 2010-11-21 03:58:11 +00:00