mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
tcp: adopt try_cmpxchg() in tcp_release_cb()
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> Link: https://lore.kernel.org/r/20221110174829.3403442-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
3e35f26d33
commit
fac30731b9
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user