if (sk) {
                u = unix_sk(sock->sk);
-               seq_printf(m, "scm_fds: %u\n", READ_ONCE(u->scm_stat.nr_fds));
+               seq_printf(m, "scm_fds: %u\n",
+                          atomic_read(&u->scm_stat.nr_fds));
        }
 }
 #else
        struct scm_fp_list *fp = UNIXCB(skb).fp;
        struct unix_sock *u = unix_sk(sk);
 
-       lockdep_assert_held(&sk->sk_receive_queue.lock);
-
        if (unlikely(fp && fp->count))
-               u->scm_stat.nr_fds += fp->count;
+               atomic_add(fp->count, &u->scm_stat.nr_fds);
 }
 
 static void scm_stat_del(struct sock *sk, struct sk_buff *skb)
        struct scm_fp_list *fp = UNIXCB(skb).fp;
        struct unix_sock *u = unix_sk(sk);
 
-       lockdep_assert_held(&sk->sk_receive_queue.lock);
-
        if (unlikely(fp && fp->count))
-               u->scm_stat.nr_fds -= fp->count;
+               atomic_sub(fp->count, &u->scm_stat.nr_fds);
 }
 
 /*
        if (sock_flag(other, SOCK_RCVTSTAMP))
                __net_timestamp(skb);
        maybe_add_creds(skb, sock, other);
-       spin_lock(&other->sk_receive_queue.lock);
        scm_stat_add(other, skb);
-       __skb_queue_tail(&other->sk_receive_queue, skb);
-       spin_unlock(&other->sk_receive_queue.lock);
+       skb_queue_tail(&other->sk_receive_queue, skb);
        unix_state_unlock(other);
        other->sk_data_ready(other);
        sock_put(other);
                        goto pipe_err_free;
 
                maybe_add_creds(skb, sock, other);
-               spin_lock(&other->sk_receive_queue.lock);
                scm_stat_add(other, skb);
-               __skb_queue_tail(&other->sk_receive_queue, skb);
-               spin_unlock(&other->sk_receive_queue.lock);
+               skb_queue_tail(&other->sk_receive_queue, skb);
                unix_state_unlock(other);
                other->sk_data_ready(other);
                sent += size;
                        sk_peek_offset_bwd(sk, chunk);
 
                        if (UNIXCB(skb).fp) {
-                               spin_lock(&sk->sk_receive_queue.lock);
                                scm_stat_del(sk, skb);
-                               spin_unlock(&sk->sk_receive_queue.lock);
                                unix_detach_fds(&scm, skb);
                        }