Commit 6b94b1c8 authored by Yuchung Cheng's avatar Yuchung Cheng Committed by David S. Miller

tcp: refactor to consolidate TFO passive open code

Use a helper to consolidate two identical code block for passive TFO.
Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
Signed-off-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 794200d6
...@@ -5989,6 +5989,27 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb, ...@@ -5989,6 +5989,27 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
return 1; return 1;
} }
static void tcp_rcv_synrecv_state_fastopen(struct sock *sk)
{
tcp_try_undo_loss(sk, false);
inet_csk(sk)->icsk_retransmits = 0;
/* Once we leave TCP_SYN_RECV or TCP_FIN_WAIT_1,
* we no longer need req so release it.
*/
reqsk_fastopen_remove(sk, tcp_sk(sk)->fastopen_rsk, false);
/* Re-arm the timer because data may have been sent out.
* This is similar to the regular data transmission case
* when new data has just been ack'ed.
*
* (TFO) - we could try to be more aggressive and
* retransmitting any data sooner based on when they
* are sent out.
*/
tcp_rearm_rto(sk);
}
/* /*
* This function implements the receiving procedure of RFC 793 for * This function implements the receiving procedure of RFC 793 for
* all states except ESTABLISHED and TIME_WAIT. * all states except ESTABLISHED and TIME_WAIT.
...@@ -6085,22 +6106,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) ...@@ -6085,22 +6106,8 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
if (!tp->srtt_us) if (!tp->srtt_us)
tcp_synack_rtt_meas(sk, req); tcp_synack_rtt_meas(sk, req);
/* Once we leave TCP_SYN_RECV, we no longer need req
* so release it.
*/
if (req) { if (req) {
tcp_try_undo_loss(sk, false); tcp_rcv_synrecv_state_fastopen(sk);
inet_csk(sk)->icsk_retransmits = 0;
reqsk_fastopen_remove(sk, req, false);
/* Re-arm the timer because data may have been sent out.
* This is similar to the regular data transmission case
* when new data has just been ack'ed.
*
* (TFO) - we could try to be more aggressive and
* retransmitting any data sooner based on when they
* are sent out.
*/
tcp_rearm_rto(sk);
} else { } else {
tcp_try_undo_spurious_syn(sk); tcp_try_undo_spurious_syn(sk);
tp->retrans_stamp = 0; tp->retrans_stamp = 0;
...@@ -6138,18 +6145,9 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) ...@@ -6138,18 +6145,9 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
case TCP_FIN_WAIT1: { case TCP_FIN_WAIT1: {
int tmo; int tmo;
/* If we enter the TCP_FIN_WAIT1 state and we are a if (req)
* Fast Open socket and this is the first acceptable tcp_rcv_synrecv_state_fastopen(sk);
* ACK we have received, this would have acknowledged
* our SYNACK so stop the SYNACK timer.
*/
if (req) {
tcp_try_undo_loss(sk, false);
inet_csk(sk)->icsk_retransmits = 0;
/* We no longer need the request sock. */
reqsk_fastopen_remove(sk, req, false);
tcp_rearm_rto(sk);
}
if (tp->snd_una != tp->write_seq) if (tp->snd_una != tp->write_seq)
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment