]> Git Repo - linux.git/commit
tcp: fix TLP timer not set when CA_STATE changes from DISORDER to OPEN
authorPengcheng Yang <[email protected]>
Sun, 24 Jan 2021 05:07:14 +0000 (13:07 +0800)
committerJakub Kicinski <[email protected]>
Sun, 24 Jan 2021 05:33:01 +0000 (21:33 -0800)
commit62d9f1a6945ba69c125e548e72a36d203b30596e
treef64639d4b170ec4c65c48ee600d370b89a78308d
parent344db93ae3ee69fc137bd6ed89a8ff1bf5b0db08
tcp: fix TLP timer not set when CA_STATE changes from DISORDER to OPEN

Upon receiving a cumulative ACK that changes the congestion state from
Disorder to Open, the TLP timer is not set. If the sender is app-limited,
it can only wait for the RTO timer to expire and retransmit.

The reason for this is that the TLP timer is set before the congestion
state changes in tcp_ack(), so we delay the time point of calling
tcp_set_xmit_timer() until after tcp_fastretrans_alert() returns and
remove the FLAG_SET_XMIT_TIMER from ack_flag when the RACK reorder timer
is set.

This commit has two additional benefits:
1) Make sure to reset RTO according to RFC6298 when receiving ACK, to
avoid spurious RTO caused by RTO timer early expires.
2) Reduce the xmit timer reschedule once per ACK when the RACK reorder
timer is set.

Fixes: df92c8394e6e ("tcp: fix xmit timer to only be reset if data ACKed/SACKed")
Link: https://lore.kernel.org/netdev/[email protected]
Signed-off-by: Pengcheng Yang <[email protected]>
Acked-by: Neal Cardwell <[email protected]>
Acked-by: Yuchung Cheng <[email protected]>
Cc: Eric Dumazet <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
include/net/tcp.h
net/ipv4/tcp_input.c
net/ipv4/tcp_recovery.c
This page took 0.043727 seconds and 4 git commands to generate.