diff options
author | Eric Dumazet <edumazet@google.com> | 2019-10-11 05:17:45 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-10-13 19:13:08 +0200 |
commit | e292f05e0df73f9fcc93329663936e1ded97a988 (patch) | |
tree | 441d2a07b24a8dc89e22f14b373ccbcdf6377b34 /net/ipv4/tcp.c | |
parent | tcp: annotate sk->sk_rcvbuf lockless reads (diff) | |
download | linux-e292f05e0df73f9fcc93329663936e1ded97a988.tar.xz linux-e292f05e0df73f9fcc93329663936e1ded97a988.zip |
tcp: annotate sk->sk_sndbuf lockless reads
For the sake of tcp_poll(), there are few places where we fetch
sk->sk_sndbuf while this field can change from IRQ or other cpu.
We need to add READ_ONCE() annotations, and also make sure write
sides use corresponding WRITE_ONCE() to avoid store-tearing.
Note that other transports probably need similar fixes.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r-- | net/ipv4/tcp.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index bc0481aa6633..111853262972 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -450,7 +450,7 @@ void tcp_init_sock(struct sock *sk) icsk->icsk_sync_mss = tcp_sync_mss; - sk->sk_sndbuf = sock_net(sk)->ipv4.sysctl_tcp_wmem[1]; + WRITE_ONCE(sk->sk_sndbuf, sock_net(sk)->ipv4.sysctl_tcp_wmem[1]); WRITE_ONCE(sk->sk_rcvbuf, sock_net(sk)->ipv4.sysctl_tcp_rmem[1]); sk_sockets_allocated_inc(sk); |