lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAAVpQUBN5DsyQ2dhJ+zwqdugMTrZ2aXw5VnVyyru2v9MakxUDQ@mail.gmail.com>
Date: Mon, 25 Aug 2025 13:15:46 -0700
From: Kuniyuki Iwashima <kuniyu@...gle.com>
To: Eric Dumazet <edumazet@...gle.com>
Cc: "David S . Miller" <davem@...emloft.net>, Jakub Kicinski <kuba@...nel.org>, 
	Paolo Abeni <pabeni@...hat.com>, Simon Horman <horms@...nel.org>, netdev@...r.kernel.org, 
	eric.dumazet@...il.com, Willem de Bruijn <willemb@...gle.com>
Subject: Re: [PATCH net-next 1/3] net: add sk_drops_read(), sk_drops_inc() and
 sk_drops_reset() helpers

On Mon, Aug 25, 2025 at 12:59 PM Eric Dumazet <edumazet@...gle.com> wrote:
>
> We want to split sk->sk_drops in the future to reduce
> potential contention on this field.
>
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>

Reviewed-by: Kuniyuki Iwashima <kuniyu@...gle.com>


> ---
>  include/net/sock.h       | 17 ++++++++++++++++-
>  include/net/tcp.h        |  2 +-
>  net/core/datagram.c      |  2 +-
>  net/core/sock.c          | 14 +++++++-------
>  net/ipv4/ping.c          |  2 +-
>  net/ipv4/raw.c           |  6 +++---
>  net/ipv4/udp.c           | 14 +++++++-------
>  net/ipv6/datagram.c      |  2 +-
>  net/ipv6/raw.c           |  8 ++++----
>  net/ipv6/udp.c           |  6 +++---
>  net/iucv/af_iucv.c       |  4 ++--
>  net/netlink/af_netlink.c |  4 ++--
>  net/packet/af_packet.c   |  2 +-
>  net/phonet/pep.c         |  6 +++---
>  net/phonet/socket.c      |  2 +-
>  net/sctp/diag.c          |  2 +-
>  net/tipc/socket.c        |  6 +++---
>  17 files changed, 57 insertions(+), 42 deletions(-)
>
> diff --git a/include/net/sock.h b/include/net/sock.h
> index 63a6a48afb48ad31abf05f5108886bac9831842a..34d7029eb622773e40e7c4ebd422d33b1c0a7836 100644
> --- a/include/net/sock.h
> +++ b/include/net/sock.h
> @@ -2682,11 +2682,26 @@ struct sock_skb_cb {
>  #define sock_skb_cb_check_size(size) \
>         BUILD_BUG_ON((size) > SOCK_SKB_CB_OFFSET)
>
> +static inline void sk_drops_inc(struct sock *sk)
> +{
> +       atomic_inc(&sk->sk_drops);
> +}
> +
> +static inline int sk_drops_read(const struct sock *sk)
> +{
> +       return atomic_read(&sk->sk_drops);
> +}
> +
> +static inline void sk_drops_reset(struct sock *sk)
> +{
> +       atomic_set(&sk->sk_drops, 0);
> +}
> +
>  static inline void
>  sock_skb_set_dropcount(const struct sock *sk, struct sk_buff *skb)
>  {
>         SOCK_SKB_CB(skb)->dropcount = sock_flag(sk, SOCK_RXQ_OVFL) ?
> -                                               atomic_read(&sk->sk_drops) : 0;
> +                                               sk_drops_read(sk) : 0;
>  }
>
>  static inline void sk_drops_add(struct sock *sk, const struct sk_buff *skb)
> diff --git a/include/net/tcp.h b/include/net/tcp.h
> index 2936b8175950faa777f81f3c6b7230bcc375d772..16dc9cebb9d25832eac7a6ad590a9e9e47e85142 100644
> --- a/include/net/tcp.h
> +++ b/include/net/tcp.h
> @@ -2612,7 +2612,7 @@ static inline void tcp_segs_in(struct tcp_sock *tp, const struct sk_buff *skb)
>   */
>  static inline void tcp_listendrop(const struct sock *sk)
>  {
> -       atomic_inc(&((struct sock *)sk)->sk_drops);
> +       sk_drops_inc((struct sock *)sk);
>         __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENDROPS);
>  }
>
> diff --git a/net/core/datagram.c b/net/core/datagram.c
> index 94cc4705e91da6ba6629ae469ae6507e9c6fdae9..ba8253aa6e07c2b0db361c9dfdaf66243dc1024c 100644
> --- a/net/core/datagram.c
> +++ b/net/core/datagram.c
> @@ -345,7 +345,7 @@ int __sk_queue_drop_skb(struct sock *sk, struct sk_buff_head *sk_queue,
>                 spin_unlock_bh(&sk_queue->lock);
>         }
>
> -       atomic_inc(&sk->sk_drops);
> +       sk_drops_inc(sk);
>         return err;
>  }
>  EXPORT_SYMBOL(__sk_queue_drop_skb);
> diff --git a/net/core/sock.c b/net/core/sock.c
> index 8002ac6293dcac694962be139eadfa6346b72d5b..75368823969a7992a55a6f40d87ffb8886de2f39 100644
> --- a/net/core/sock.c
> +++ b/net/core/sock.c
> @@ -491,13 +491,13 @@ int __sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
>         struct sk_buff_head *list = &sk->sk_receive_queue;
>
>         if (atomic_read(&sk->sk_rmem_alloc) >= READ_ONCE(sk->sk_rcvbuf)) {
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 trace_sock_rcvqueue_full(sk, skb);
>                 return -ENOMEM;
>         }
>
>         if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 return -ENOBUFS;
>         }
>
> @@ -562,7 +562,7 @@ int __sk_receive_skb(struct sock *sk, struct sk_buff *skb,
>         skb->dev = NULL;
>
>         if (sk_rcvqueues_full(sk, READ_ONCE(sk->sk_rcvbuf))) {
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 reason = SKB_DROP_REASON_SOCKET_RCVBUFF;
>                 goto discard_and_relse;
>         }
> @@ -585,7 +585,7 @@ int __sk_receive_skb(struct sock *sk, struct sk_buff *skb,
>                         reason = SKB_DROP_REASON_PFMEMALLOC;
>                 if (err == -ENOBUFS)
>                         reason = SKB_DROP_REASON_SOCKET_BACKLOG;
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 goto discard_and_relse;
>         }
>
> @@ -2505,7 +2505,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
>         newsk->sk_wmem_queued   = 0;
>         newsk->sk_forward_alloc = 0;
>         newsk->sk_reserved_mem  = 0;
> -       atomic_set(&newsk->sk_drops, 0);
> +       sk_drops_reset(newsk);
>         newsk->sk_send_head     = NULL;
>         newsk->sk_userlocks     = sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
>         atomic_set(&newsk->sk_zckey, 0);
> @@ -3713,7 +3713,7 @@ void sock_init_data_uid(struct socket *sock, struct sock *sk, kuid_t uid)
>          */
>         smp_wmb();
>         refcount_set(&sk->sk_refcnt, 1);
> -       atomic_set(&sk->sk_drops, 0);
> +       sk_drops_reset(sk);
>  }
>  EXPORT_SYMBOL(sock_init_data_uid);
>
> @@ -3973,7 +3973,7 @@ void sk_get_meminfo(const struct sock *sk, u32 *mem)
>         mem[SK_MEMINFO_WMEM_QUEUED] = READ_ONCE(sk->sk_wmem_queued);
>         mem[SK_MEMINFO_OPTMEM] = atomic_read(&sk->sk_omem_alloc);
>         mem[SK_MEMINFO_BACKLOG] = READ_ONCE(sk->sk_backlog.len);
> -       mem[SK_MEMINFO_DROPS] = atomic_read(&sk->sk_drops);
> +       mem[SK_MEMINFO_DROPS] = sk_drops_read(sk);
>  }
>
>  #ifdef CONFIG_PROC_FS
> diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
> index 031df4c19fcc5ca18137695c78358c3ad96a2c4a..f119da68fc301be00719213ad33615b6754e6272 100644
> --- a/net/ipv4/ping.c
> +++ b/net/ipv4/ping.c
> @@ -1119,7 +1119,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f,
>                 from_kuid_munged(seq_user_ns(f), sk_uid(sp)),
>                 0, sock_i_ino(sp),
>                 refcount_read(&sp->sk_refcnt), sp,
> -               atomic_read(&sp->sk_drops));
> +               sk_drops_read(sp));
>  }
>
>  static int ping_v4_seq_show(struct seq_file *seq, void *v)
> diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
> index 1d2c89d63cc71f39d742c8156879847fc4e53c71..0f9f02f6146eef6df3f5bbb4f564e16fbabd1ba2 100644
> --- a/net/ipv4/raw.c
> +++ b/net/ipv4/raw.c
> @@ -178,7 +178,7 @@ static int raw_v4_input(struct net *net, struct sk_buff *skb,
>
>                 if (atomic_read(&sk->sk_rmem_alloc) >=
>                     READ_ONCE(sk->sk_rcvbuf)) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         continue;
>                 }
>
> @@ -311,7 +311,7 @@ static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb)
>  int raw_rcv(struct sock *sk, struct sk_buff *skb)
>  {
>         if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) {
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 sk_skb_reason_drop(sk, skb, SKB_DROP_REASON_XFRM_POLICY);
>                 return NET_RX_DROP;
>         }
> @@ -1045,7 +1045,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i)
>                 0, 0L, 0,
>                 from_kuid_munged(seq_user_ns(seq), sk_uid(sp)),
>                 0, sock_i_ino(sp),
> -               refcount_read(&sp->sk_refcnt), sp, atomic_read(&sp->sk_drops));
> +               refcount_read(&sp->sk_refcnt), sp, sk_drops_read(sp));
>  }
>
>  static int raw_seq_show(struct seq_file *seq, void *v)
> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
> index cc3ce0f762ec211a963464c2dd7ac329a6be1ffd..732bdad43626948168bdb9e40c151787f047bbfd 100644
> --- a/net/ipv4/udp.c
> +++ b/net/ipv4/udp.c
> @@ -1787,7 +1787,7 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb)
>         atomic_sub(skb->truesize, &sk->sk_rmem_alloc);
>
>  drop:
> -       atomic_inc(&sk->sk_drops);
> +       sk_drops_inc(sk);
>         busylock_release(busy);
>         return err;
>  }
> @@ -1852,7 +1852,7 @@ static struct sk_buff *__first_packet_length(struct sock *sk,
>                                         IS_UDPLITE(sk));
>                         __UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS,
>                                         IS_UDPLITE(sk));
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         __skb_unlink(skb, rcvq);
>                         *total += skb->truesize;
>                         kfree_skb_reason(skb, SKB_DROP_REASON_UDP_CSUM);
> @@ -2008,7 +2008,7 @@ int udp_read_skb(struct sock *sk, skb_read_actor_t recv_actor)
>
>                 __UDP_INC_STATS(net, UDP_MIB_CSUMERRORS, is_udplite);
>                 __UDP_INC_STATS(net, UDP_MIB_INERRORS, is_udplite);
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 kfree_skb_reason(skb, SKB_DROP_REASON_UDP_CSUM);
>                 goto try_again;
>         }
> @@ -2078,7 +2078,7 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
>
>         if (unlikely(err)) {
>                 if (!peeking) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         UDP_INC_STATS(sock_net(sk),
>                                       UDP_MIB_INERRORS, is_udplite);
>                 }
> @@ -2449,7 +2449,7 @@ static int udp_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
>         __UDP_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
>  drop:
>         __UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
> -       atomic_inc(&sk->sk_drops);
> +       sk_drops_inc(sk);
>         sk_skb_reason_drop(sk, skb, drop_reason);
>         return -1;
>  }
> @@ -2534,7 +2534,7 @@ static int __udp4_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
>                 nskb = skb_clone(skb, GFP_ATOMIC);
>
>                 if (unlikely(!nskb)) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         __UDP_INC_STATS(net, UDP_MIB_RCVBUFERRORS,
>                                         IS_UDPLITE(sk));
>                         __UDP_INC_STATS(net, UDP_MIB_INERRORS,
> @@ -3386,7 +3386,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
>                 from_kuid_munged(seq_user_ns(f), sk_uid(sp)),
>                 0, sock_i_ino(sp),
>                 refcount_read(&sp->sk_refcnt), sp,
> -               atomic_read(&sp->sk_drops));
> +               sk_drops_read(sp));
>  }
>
>  int udp4_seq_show(struct seq_file *seq, void *v)
> diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
> index 972bf0426d599af43bfd2d0e4236592f34ec7866..33ebe93d80e3cb6d897a3c7f714f94c395856023 100644
> --- a/net/ipv6/datagram.c
> +++ b/net/ipv6/datagram.c
> @@ -1068,5 +1068,5 @@ void __ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
>                    0,
>                    sock_i_ino(sp),
>                    refcount_read(&sp->sk_refcnt), sp,
> -                  atomic_read(&sp->sk_drops));
> +                  sk_drops_read(sp));
>  }
> diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
> index 4c3f8245c40f155f3efde0d7b8af50e0bef431c7..4026192143ec9f1b071f43874185bc367c950c67 100644
> --- a/net/ipv6/raw.c
> +++ b/net/ipv6/raw.c
> @@ -163,7 +163,7 @@ static bool ipv6_raw_deliver(struct sk_buff *skb, int nexthdr)
>
>                 if (atomic_read(&sk->sk_rmem_alloc) >=
>                     READ_ONCE(sk->sk_rcvbuf)) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         continue;
>                 }
>
> @@ -361,7 +361,7 @@ static inline int rawv6_rcv_skb(struct sock *sk, struct sk_buff *skb)
>
>         if ((raw6_sk(sk)->checksum || rcu_access_pointer(sk->sk_filter)) &&
>             skb_checksum_complete(skb)) {
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 sk_skb_reason_drop(sk, skb, SKB_DROP_REASON_SKB_CSUM);
>                 return NET_RX_DROP;
>         }
> @@ -389,7 +389,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
>         struct raw6_sock *rp = raw6_sk(sk);
>
>         if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) {
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 sk_skb_reason_drop(sk, skb, SKB_DROP_REASON_XFRM_POLICY);
>                 return NET_RX_DROP;
>         }
> @@ -414,7 +414,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
>
>         if (inet_test_bit(HDRINCL, sk)) {
>                 if (skb_checksum_complete(skb)) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         sk_skb_reason_drop(sk, skb, SKB_DROP_REASON_SKB_CSUM);
>                         return NET_RX_DROP;
>                 }
> diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
> index 6a68f77da44b55baed42b44c936902f865754140..a35ee6d693a8080b9009f61d23fafd2465b8c625 100644
> --- a/net/ipv6/udp.c
> +++ b/net/ipv6/udp.c
> @@ -524,7 +524,7 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>         }
>         if (unlikely(err)) {
>                 if (!peeking) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         SNMP_INC_STATS(mib, UDP_MIB_INERRORS);
>                 }
>                 kfree_skb(skb);
> @@ -908,7 +908,7 @@ static int udpv6_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
>         __UDP6_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
>  drop:
>         __UDP6_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
> -       atomic_inc(&sk->sk_drops);
> +       sk_drops_inc(sk);
>         sk_skb_reason_drop(sk, skb, drop_reason);
>         return -1;
>  }
> @@ -1013,7 +1013,7 @@ static int __udp6_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
>                 }
>                 nskb = skb_clone(skb, GFP_ATOMIC);
>                 if (unlikely(!nskb)) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         __UDP6_INC_STATS(net, UDP_MIB_RCVBUFERRORS,
>                                          IS_UDPLITE(sk));
>                         __UDP6_INC_STATS(net, UDP_MIB_INERRORS,
> diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
> index cc2b3c44bc05a629d455e99369491b28b4b93884..6c717a7ef292831b49c1dca22ecc2bb7a7179b0f 100644
> --- a/net/iucv/af_iucv.c
> +++ b/net/iucv/af_iucv.c
> @@ -1187,7 +1187,7 @@ static void iucv_process_message(struct sock *sk, struct sk_buff *skb,
>
>         IUCV_SKB_CB(skb)->offset = 0;
>         if (sk_filter(sk, skb)) {
> -               atomic_inc(&sk->sk_drops);      /* skb rejected by filter */
> +               sk_drops_inc(sk);       /* skb rejected by filter */
>                 kfree_skb(skb);
>                 return;
>         }
> @@ -2011,7 +2011,7 @@ static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb)
>         skb_reset_network_header(skb);
>         IUCV_SKB_CB(skb)->offset = 0;
>         if (sk_filter(sk, skb)) {
> -               atomic_inc(&sk->sk_drops);      /* skb rejected by filter */
> +               sk_drops_inc(sk);       /* skb rejected by filter */
>                 kfree_skb(skb);
>                 return NET_RX_SUCCESS;
>         }
> diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
> index e2f7080dd5d7cd52722248b719c294cdccf70328..2b46c0cd752a313ad95cf17c46237883d6b85293 100644
> --- a/net/netlink/af_netlink.c
> +++ b/net/netlink/af_netlink.c
> @@ -356,7 +356,7 @@ static void netlink_overrun(struct sock *sk)
>                         sk_error_report(sk);
>                 }
>         }
> -       atomic_inc(&sk->sk_drops);
> +       sk_drops_inc(sk);
>  }
>
>  static void netlink_rcv_wake(struct sock *sk)
> @@ -2711,7 +2711,7 @@ static int netlink_native_seq_show(struct seq_file *seq, void *v)
>                            sk_wmem_alloc_get(s),
>                            READ_ONCE(nlk->cb_running),
>                            refcount_read(&s->sk_refcnt),
> -                          atomic_read(&s->sk_drops),
> +                          sk_drops_read(s),
>                            sock_i_ino(s)
>                         );
>
> diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> index a7017d7f09272058106181e95367080dc821da69..9d42c4bd6e390c7212fc0a8dde5cc14ba7a00d53 100644
> --- a/net/packet/af_packet.c
> +++ b/net/packet/af_packet.c
> @@ -2265,7 +2265,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
>
>  drop_n_acct:
>         atomic_inc(&po->tp_drops);
> -       atomic_inc(&sk->sk_drops);
> +       sk_drops_inc(sk);
>         drop_reason = SKB_DROP_REASON_PACKET_SOCK_ERROR;
>
>  drop_n_restore:
> diff --git a/net/phonet/pep.c b/net/phonet/pep.c
> index 62527e1ebb883d2854bcdc5256cd48e85e5c5dbc..4db564d9d522b639e9527d48eaa42a1cd9fbfba7 100644
> --- a/net/phonet/pep.c
> +++ b/net/phonet/pep.c
> @@ -376,7 +376,7 @@ static int pipe_do_rcv(struct sock *sk, struct sk_buff *skb)
>
>         case PNS_PEP_CTRL_REQ:
>                 if (skb_queue_len(&pn->ctrlreq_queue) >= PNPIPE_CTRLREQ_MAX) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         break;
>                 }
>                 __skb_pull(skb, 4);
> @@ -397,7 +397,7 @@ static int pipe_do_rcv(struct sock *sk, struct sk_buff *skb)
>                 }
>
>                 if (pn->rx_credits == 0) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         err = -ENOBUFS;
>                         break;
>                 }
> @@ -567,7 +567,7 @@ static int pipe_handler_do_rcv(struct sock *sk, struct sk_buff *skb)
>                 }
>
>                 if (pn->rx_credits == 0) {
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         err = NET_RX_DROP;
>                         break;
>                 }
> diff --git a/net/phonet/socket.c b/net/phonet/socket.c
> index 2b61a40b568e91e340130a9b589e2b7a9346643f..db2d552e9b32e384c332774b99199108abd464f2 100644
> --- a/net/phonet/socket.c
> +++ b/net/phonet/socket.c
> @@ -587,7 +587,7 @@ static int pn_sock_seq_show(struct seq_file *seq, void *v)
>                         from_kuid_munged(seq_user_ns(seq), sk_uid(sk)),
>                         sock_i_ino(sk),
>                         refcount_read(&sk->sk_refcnt), sk,
> -                       atomic_read(&sk->sk_drops));
> +                       sk_drops_read(sk));
>         }
>         seq_pad(seq, '\n');
>         return 0;
> diff --git a/net/sctp/diag.c b/net/sctp/diag.c
> index 23359e522273f0377080007c75eb2c276945f781..996c2018f0e611bd0da2df2f73e90e2f94c463d9 100644
> --- a/net/sctp/diag.c
> +++ b/net/sctp/diag.c
> @@ -173,7 +173,7 @@ static int inet_sctp_diag_fill(struct sock *sk, struct sctp_association *asoc,
>                 mem[SK_MEMINFO_WMEM_QUEUED] = sk->sk_wmem_queued;
>                 mem[SK_MEMINFO_OPTMEM] = atomic_read(&sk->sk_omem_alloc);
>                 mem[SK_MEMINFO_BACKLOG] = READ_ONCE(sk->sk_backlog.len);
> -               mem[SK_MEMINFO_DROPS] = atomic_read(&sk->sk_drops);
> +               mem[SK_MEMINFO_DROPS] = sk_drops_read(sk);
>
>                 if (nla_put(skb, INET_DIAG_SKMEMINFO, sizeof(mem), &mem) < 0)
>                         goto errout;
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c
> index e028bf6584992c5ab7307d81082fbe4582e78068..1574a83384f88533cfab330c559512d5878bf0aa 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -2366,7 +2366,7 @@ static void tipc_sk_filter_rcv(struct sock *sk, struct sk_buff *skb,
>                 else if (sk_rmem_alloc_get(sk) + skb->truesize >= limit) {
>                         trace_tipc_sk_dump(sk, skb, TIPC_DUMP_ALL,
>                                            "err_overload2!");
> -                       atomic_inc(&sk->sk_drops);
> +                       sk_drops_inc(sk);
>                         err = TIPC_ERR_OVERLOAD;
>                 }
>
> @@ -2458,7 +2458,7 @@ static void tipc_sk_enqueue(struct sk_buff_head *inputq, struct sock *sk,
>                 trace_tipc_sk_dump(sk, skb, TIPC_DUMP_ALL, "err_overload!");
>                 /* Overload => reject message back to sender */
>                 onode = tipc_own_addr(sock_net(sk));
> -               atomic_inc(&sk->sk_drops);
> +               sk_drops_inc(sk);
>                 if (tipc_msg_reverse(onode, &skb, TIPC_ERR_OVERLOAD)) {
>                         trace_tipc_sk_rej_msg(sk, skb, TIPC_DUMP_ALL,
>                                               "@sk_enqueue!");
> @@ -3657,7 +3657,7 @@ int tipc_sk_fill_sock_diag(struct sk_buff *skb, struct netlink_callback *cb,
>             nla_put_u32(skb, TIPC_NLA_SOCK_STAT_SENDQ,
>                         skb_queue_len(&sk->sk_write_queue)) ||
>             nla_put_u32(skb, TIPC_NLA_SOCK_STAT_DROP,
> -                       atomic_read(&sk->sk_drops)))
> +                       sk_drops_read(sk)))
>                 goto stat_msg_cancel;
>
>         if (tsk->cong_link_cnt &&
> --
> 2.51.0.261.g7ce5a0a67e-goog
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ