aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
authorYuchung Cheng <ycheng@google.com>2019-04-29 18:46:19 -0400
committerDavid S. Miller <davem@davemloft.net>2019-05-01 11:47:54 -0400
commit6b94b1c88b660a786fdb1c22d8a0d3529fe40f8c (patch)
tree94f9dd344ea2aa1a5dbee85f2746614b186403c0 /net/ipv4/tcp_input.c
parent794200d66273cbfa32cab2dbcd59a5db6b57a5d1 (diff)
tcp: refactor to consolidate TFO passive open code
Use a helper to consolidate two identical code block for passive TFO. Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c52
1 files changed, 25 insertions, 27 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 3a40584cb473..706a99ec73f6 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -5989,6 +5989,27 @@ reset_and_undo:
5989 return 1; 5989 return 1;
5990} 5990}
5991 5991
5992static void tcp_rcv_synrecv_state_fastopen(struct sock *sk)
5993{
5994 tcp_try_undo_loss(sk, false);
5995 inet_csk(sk)->icsk_retransmits = 0;
5996
5997 /* Once we leave TCP_SYN_RECV or TCP_FIN_WAIT_1,
5998 * we no longer need req so release it.
5999 */
6000 reqsk_fastopen_remove(sk, tcp_sk(sk)->fastopen_rsk, false);
6001
6002 /* Re-arm the timer because data may have been sent out.
6003 * This is similar to the regular data transmission case
6004 * when new data has just been ack'ed.
6005 *
6006 * (TFO) - we could try to be more aggressive and
6007 * retransmitting any data sooner based on when they
6008 * are sent out.
6009 */
6010 tcp_rearm_rto(sk);
6011}
6012
5992/* 6013/*
5993 * This function implements the receiving procedure of RFC 793 for 6014 * This function implements the receiving procedure of RFC 793 for
5994 * all states except ESTABLISHED and TIME_WAIT. 6015 * all states except ESTABLISHED and TIME_WAIT.
@@ -6085,22 +6106,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
6085 if (!tp->srtt_us) 6106 if (!tp->srtt_us)
6086 tcp_synack_rtt_meas(sk, req); 6107 tcp_synack_rtt_meas(sk, req);
6087 6108
6088 /* Once we leave TCP_SYN_RECV, we no longer need req
6089 * so release it.
6090 */
6091 if (req) { 6109 if (req) {
6092 tcp_try_undo_loss(sk, false); 6110 tcp_rcv_synrecv_state_fastopen(sk);
6093 inet_csk(sk)->icsk_retransmits = 0;
6094 reqsk_fastopen_remove(sk, req, false);
6095 /* Re-arm the timer because data may have been sent out.
6096 * This is similar to the regular data transmission case
6097 * when new data has just been ack'ed.
6098 *
6099 * (TFO) - we could try to be more aggressive and
6100 * retransmitting any data sooner based on when they
6101 * are sent out.
6102 */
6103 tcp_rearm_rto(sk);
6104 } else { 6111 } else {
6105 tcp_try_undo_spurious_syn(sk); 6112 tcp_try_undo_spurious_syn(sk);
6106 tp->retrans_stamp = 0; 6113 tp->retrans_stamp = 0;
@@ -6138,18 +6145,9 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
6138 case TCP_FIN_WAIT1: { 6145 case TCP_FIN_WAIT1: {
6139 int tmo; 6146 int tmo;
6140 6147
6141 /* If we enter the TCP_FIN_WAIT1 state and we are a 6148 if (req)
6142 * Fast Open socket and this is the first acceptable 6149 tcp_rcv_synrecv_state_fastopen(sk);
6143 * ACK we have received, this would have acknowledged 6150
6144 * our SYNACK so stop the SYNACK timer.
6145 */
6146 if (req) {
6147 tcp_try_undo_loss(sk, false);
6148 inet_csk(sk)->icsk_retransmits = 0;
6149 /* We no longer need the request sock. */
6150 reqsk_fastopen_remove(sk, req, false);
6151 tcp_rearm_rto(sk);
6152 }
6153 if (tp->snd_una != tp->write_seq) 6151 if (tp->snd_una != tp->write_seq)
6154 break; 6152 break;
6155 6153