tcp: detect SYN/data drop when F-RTO is disabled
authorYuchung Cheng <ycheng@google.com>
Thu, 31 Jan 2013 19:16:46 +0000 (11:16 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 31 Jan 2013 19:20:07 +0000 (14:20 -0500)
On receiving the SYN-ACK, Fast Open checks icsk_retransmit for SYN
retransmission to detect SYN/data drops. But if F-RTO is disabled,
icsk_retransmit is reset at step D of tcp_fastretrans_alert() (
under tcp_ack()) before tcp_rcv_fastopen_synack(). The fix is to use
total_retrans instead which accounts for SYN retransmission regardless
the use of F-RTO.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c

index 18f97ca76b00223b25d0f6faed8a829c45fb95c8..8aca4ee95ff9e29ddfa154f53970aa6e053834d4 100644 (file)
@@ -5649,8 +5649,7 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, struct sk_buff *synack,
         * the remote receives only the retransmitted (regular) SYNs: either
         * the original SYN-data or the corresponding SYN-ACK is lost.
         */
-       syn_drop = (cookie->len <= 0 && data &&
-                   inet_csk(sk)->icsk_retransmits);
+       syn_drop = (cookie->len <= 0 && data && tp->total_retrans);
 
        tcp_fastopen_cache_set(sk, mss, cookie, syn_drop);