mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-07-08 18:13:59 +02:00
tcp: add data-race annotations around tp->data_segs_out and tp->total_retrans
tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
add READ_ONCE() and WRITE_ONCE() annotations to keep KCSAN happy.
Fixes: 7e98102f48 ("tcp: record pkts sent and retransmistted")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260416200319.3608680-3-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
267bf3cf9a
commit
21e92a38cf
+2
-2
@@ -4434,9 +4434,9 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk,
|
||||
nla_put_u64_64bit(stats, TCP_NLA_SNDBUF_LIMITED,
|
||||
info.tcpi_sndbuf_limited, TCP_NLA_PAD);
|
||||
nla_put_u64_64bit(stats, TCP_NLA_DATA_SEGS_OUT,
|
||||
tp->data_segs_out, TCP_NLA_PAD);
|
||||
READ_ONCE(tp->data_segs_out), TCP_NLA_PAD);
|
||||
nla_put_u64_64bit(stats, TCP_NLA_TOTAL_RETRANS,
|
||||
tp->total_retrans, TCP_NLA_PAD);
|
||||
READ_ONCE(tp->total_retrans), TCP_NLA_PAD);
|
||||
|
||||
rate = READ_ONCE(sk->sk_pacing_rate);
|
||||
rate64 = (rate != ~0UL) ? rate : ~0ULL;
|
||||
|
||||
@@ -1688,7 +1688,8 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb,
|
||||
|
||||
if (skb->len != tcp_header_size) {
|
||||
tcp_event_data_sent(tp, sk);
|
||||
tp->data_segs_out += tcp_skb_pcount(skb);
|
||||
WRITE_ONCE(tp->data_segs_out,
|
||||
tp->data_segs_out + tcp_skb_pcount(skb));
|
||||
tp->bytes_sent += skb->len - tcp_header_size;
|
||||
}
|
||||
|
||||
@@ -3642,7 +3643,7 @@ start:
|
||||
TCP_ADD_STATS(sock_net(sk), TCP_MIB_RETRANSSEGS, segs);
|
||||
if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_SYN)
|
||||
__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPSYNRETRANS);
|
||||
tp->total_retrans += segs;
|
||||
WRITE_ONCE(tp->total_retrans, tp->total_retrans + segs);
|
||||
tp->bytes_retrans += skb->len;
|
||||
|
||||
/* make sure skb->data is aligned on arches that require it
|
||||
@@ -4646,7 +4647,8 @@ int tcp_rtx_synack(const struct sock *sk, struct request_sock *req)
|
||||
* However in this case, we are dealing with a passive fastopen
|
||||
* socket thus we can change total_retrans value.
|
||||
*/
|
||||
tcp_sk_rw(sk)->total_retrans++;
|
||||
WRITE_ONCE(tcp_sk_rw(sk)->total_retrans,
|
||||
tcp_sk_rw(sk)->total_retrans + 1);
|
||||
}
|
||||
trace_tcp_retransmit_synack(sk, req);
|
||||
WRITE_ONCE(req->num_retrans, req->num_retrans + 1);
|
||||
|
||||
Reference in New Issue
Block a user