Commit e326578
tcp: call tcp_try_undo_recovery when an RTOd TFO SYNACK is ACKed
For passive TCP Fast Open sockets that had SYN/ACK timeout and did not
send more data in SYN_RECV, upon receiving the final ACK in 3WHS, the
congestion state may awkwardly stay in CA_Loss mode unless the CA state
was undone due to TCP timestamp checks. However, if
tcp_rcv_synrecv_state_fastopen() decides not to undo, then we should
enter CA_Open, because at that point we have received an ACK covering
the retransmitted SYNACKs. Currently, the icsk_ca_state is only set to
CA_Open after we receive an ACK for a data-packet. This is because
tcp_ack does not call tcp_fastretrans_alert (and tcp_process_loss) if
!prior_packets
Note that tcp_process_loss() calls tcp_try_undo_recovery(), so having
tcp_rcv_synrecv_state_fastopen() decide that if we're in CA_Loss we
should call tcp_try_undo_recovery() is consistent with that, and
low risk.
Fixes: dad8cea ("tcp: fix TFO SYNACK undo to avoid double-timestamp-undo")
Signed-off-by: Aananth V <aananthv@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>1 parent 50675d8 commit e326578
1 file changed
+5
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6444 | 6444 | | |
6445 | 6445 | | |
6446 | 6446 | | |
| 6447 | + | |
6447 | 6448 | | |
6448 | 6449 | | |
6449 | 6450 | | |
6450 | 6451 | | |
6451 | 6452 | | |
6452 | | - | |
6453 | | - | |
| 6453 | + | |
| 6454 | + | |
6454 | 6455 | | |
6455 | 6456 | | |
6456 | | - | |
| 6457 | + | |
6457 | 6458 | | |
6458 | 6459 | | |
6459 | 6460 | | |
6460 | 6461 | | |
6461 | 6462 | | |
6462 | | - | |
| 6463 | + | |
6463 | 6464 | | |
6464 | 6465 | | |
6465 | 6466 | | |
| |||
0 commit comments