]> git.baikalelectronics.ru Git - kernel.git/commit
tcp: bug fix Fast Open client retransmission
authorYuchung Cheng <ycheng@google.com>
Thu, 6 Dec 2012 08:45:32 +0000 (08:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 7 Dec 2012 19:39:28 +0000 (14:39 -0500)
commit28d65b2d29cf14f8efcd02ce621c23d5a6e9482e
treef9e7fd386880ae14d4625de9801a57c5bf5fa105
parent9ed00100bce8d61e3994093e145a554e66ca97b6
tcp: bug fix Fast Open client retransmission

If SYN-ACK partially acks SYN-data, the client retransmits the
remaining data by tcp_retransmit_skb(). This increments lost recovery
state variables like tp->retrans_out in Open state. If loss recovery
happens before the retransmission is acked, it triggers the WARN_ON
check in tcp_fastretrans_alert(). For example: the client sends
SYN-data, gets SYN-ACK acking only ISN, retransmits data, sends
another 4 data packets and get 3 dupacks.

Since the retransmission is not caused by network drop it should not
update the recovery state variables. Further the server may return a
smaller MSS than the cached MSS used for SYN-data, so the retranmission
needs a loop. Otherwise some data will not be retransmitted until timeout
or other loss recovery events.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tcp.h
net/ipv4/tcp_input.c
net/ipv4/tcp_output.c