Move TCPCB_EVER_RETRANS updating after the trace_tcp_retransmit_skb() in __tcp_retransmit_skb(), and then we are aware of whether the skb has ever been retransmitted in this tracepoint. This can be used, e.g., to get retransmission efficiency by counting skbs w/ and w/o TCPCB_EVER_RETRANS (through bpf tracing programs). For this purpose, TCPCB_EVER_RETRANS is also needed to be exposed to bpf. Previously, the flags are defined as macros in struct tcp_skb_cb. I moved them out into a new enum, and then they can be accessed with vmlinux.h. We have discussed to achieve this with BPF_SOCK_OPS in [0], and using tracepoint is thought to be a better solution. [0] https://lore.kernel.org/all/20240417124622.35333-1-lulie@xxxxxxxxxxxxxxxxx/ Philo Lu (2): tcp: move tcp_skb_cb->sacked flags to enum tcp: update sacked after tracepoint in __tcp_retransmit_skb include/net/tcp.h | 22 +++++++++++++--------- net/ipv4/tcp_output.c | 11 ++++++----- 2 files changed, 19 insertions(+), 14 deletions(-) -- 2.32.0.3.g01195cf9f