*/
 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);