mirror of https://github.com/torvalds/linux.git
delack timer is not stopped from inet_csk_clear_xmit_timer() because we do not define INET_CSK_CLEAR_TIMERS. This is a conscious choice : inet_csk_clear_xmit_timer() is often called from another cpu. Calling del_timer() would cause false sharing and lock contention. This means that very often, tcp_delack_timer() is called at the timer expiration, while there is no ACK to transmit. This can be detected very early, avoiding the socket spinlock. Notes: - test about tp->compressed_ack is racy, but in the unlikely case there is a race, the dedicated compressed_ack_timer hrtimer would close it. - Even if the fast path is not taken, reading icsk->icsk_ack.pending and tp->compressed_ack before acquiring the socket spinlock reduces acquisition time and chances of contention. Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20241002173042.917928-4-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
||
|---|---|---|
| .. | ||
| Kconfig | ||
| Makefile | ||
| bpf.c | ||
| crypto.c | ||
| crypto_test.c | ||
| ctrl.c | ||
| diag.c | ||
| fastopen.c | ||
| mib.c | ||
| mib.h | ||
| mptcp_diag.c | ||
| mptcp_pm_gen.c | ||
| mptcp_pm_gen.h | ||
| options.c | ||
| pm.c | ||
| pm_netlink.c | ||
| pm_userspace.c | ||
| protocol.c | ||
| protocol.h | ||
| sched.c | ||
| sockopt.c | ||
| subflow.c | ||
| syncookies.c | ||
| token.c | ||
| token_test.c | ||