Message ID | 20221110174829.3403442-1-edumazet@google.com (mailing list archive) |
---|---|
State | Accepted |
Commit | fac30731b9b8a0b7580bf73ddd25035ef0a733a5 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] tcp: adopt try_cmpxchg() in tcp_release_cb() | expand |
Hello: This patch was applied to netdev/net-next.git (master) by Jakub Kicinski <kuba@kernel.org>: On Thu, 10 Nov 2022 17:48:29 +0000 you wrote: > try_cmpxchg() is slighly more efficient (at least on x86), > and smp_load_acquire(&sk->sk_tsq_flags) could avoid a KCSAN report. > > Signed-off-by: Eric Dumazet <edumazet@google.com> > --- > net/ipv4/tcp_output.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) Here is the summary with links: - [net-next] tcp: adopt try_cmpxchg() in tcp_release_cb() https://git.kernel.org/netdev/net-next/c/fac30731b9b8 You are awesome, thank you!
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index c69f4d966024ce2c37dae63f7be94fe79c7dd648..d1cb1ecf8f216dc810ca08ea35ae752fd19ba706 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1077,15 +1077,15 @@ static void tcp_tasklet_func(struct tasklet_struct *t) */ void tcp_release_cb(struct sock *sk) { - unsigned long flags, nflags; + unsigned long flags = smp_load_acquire(&sk->sk_tsq_flags); + unsigned long nflags; /* perform an atomic operation only if at least one flag is set */ do { - flags = sk->sk_tsq_flags; if (!(flags & TCP_DEFERRED_ALL)) return; nflags = flags & ~TCP_DEFERRED_ALL; - } while (cmpxchg(&sk->sk_tsq_flags, flags, nflags) != flags); + } while (!try_cmpxchg(&sk->sk_tsq_flags, &flags, nflags)); if (flags & TCPF_TSQ_DEFERRED) { tcp_tsq_write(sk);
try_cmpxchg() is slighly more efficient (at least on x86), and smp_load_acquire(&sk->sk_tsq_flags) could avoid a KCSAN report. Signed-off-by: Eric Dumazet <edumazet@google.com> --- net/ipv4/tcp_output.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)