net: no longer support SOCK_REFCNT_DEBUG feature
authorJason Xing <kernelxing@tencent.com>
Tue, 14 Feb 2023 04:14:10 +0000 (12:14 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 15 Feb 2023 10:25:21 +0000 (10:25 +0000)
Commit e48c414ee61f ("[INET]: Generalise the TCP sock ID lookup routines")
commented out the definition of SOCK_REFCNT_DEBUG in 2005 and later another
commit 463c84b97f24 ("[NET]: Introduce inet_connection_sock") removed it.
Since we could track all of them through bpf and kprobe related tools
and the feature could print loads of information which might not be
that helpful even under a little bit pressure, the whole feature which
has been inactive for many years is no longer supported.

Link: https://lore.kernel.org/lkml/20230211065153.54116-1-kerneljasonxing@gmail.com/
Suggested-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: Jason Xing <kernelxing@tencent.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Acked-by: Wenjia Zhang <wenjia@linux.ibm.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
13 files changed:
include/net/sock.h
net/core/sock.c
net/ipv4/af_inet.c
net/ipv4/inet_connection_sock.c
net/ipv4/inet_timewait_sock.c
net/ipv6/af_inet6.c
net/ipv6/ipv6_sockglue.c
net/mptcp/protocol.c
net/packet/af_packet.c
net/sctp/ipv6.c
net/sctp/protocol.c
net/smc/af_smc.c
net/xdp/xsk.c

index 937e842dc9303feb30550ff091d068814cb19078..2cb258fde07204d607dc3efd5101eec68477133a 100644 (file)
@@ -1349,9 +1349,6 @@ struct proto {
        char                    name[32];
 
        struct list_head        node;
-#ifdef SOCK_REFCNT_DEBUG
-       atomic_t                socks;
-#endif
        int                     (*diag_destroy)(struct sock *sk, int err);
 } __randomize_layout;
 
@@ -1359,31 +1356,6 @@ int proto_register(struct proto *prot, int alloc_slab);
 void proto_unregister(struct proto *prot);
 int sock_load_diag_module(int family, int protocol);
 
-#ifdef SOCK_REFCNT_DEBUG
-static inline void sk_refcnt_debug_inc(struct sock *sk)
-{
-       atomic_inc(&sk->sk_prot->socks);
-}
-
-static inline void sk_refcnt_debug_dec(struct sock *sk)
-{
-       atomic_dec(&sk->sk_prot->socks);
-       printk(KERN_DEBUG "%s socket %p released, %d are still alive\n",
-              sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks));
-}
-
-static inline void sk_refcnt_debug_release(const struct sock *sk)
-{
-       if (refcount_read(&sk->sk_refcnt) != 1)
-               printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n",
-                      sk->sk_prot->name, sk, refcount_read(&sk->sk_refcnt));
-}
-#else /* SOCK_REFCNT_DEBUG */
-#define sk_refcnt_debug_inc(sk) do { } while (0)
-#define sk_refcnt_debug_dec(sk) do { } while (0)
-#define sk_refcnt_debug_release(sk) do { } while (0)
-#endif /* SOCK_REFCNT_DEBUG */
-
 INDIRECT_CALLABLE_DECLARE(bool tcp_stream_memory_free(const struct sock *sk, int wake));
 
 static inline int sk_forward_alloc_get(const struct sock *sk)
index afbb02984d5fd6df685651a70c81733a22c49298..341c565dbc262fcece1c5b410609d910a68edcb0 100644 (file)
@@ -2340,17 +2340,6 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
        smp_wmb();
        refcount_set(&newsk->sk_refcnt, 2);
 
-       /* Increment the counter in the same struct proto as the master
-        * sock (sk_refcnt_debug_inc uses newsk->sk_prot->socks, that
-        * is the same as sk->sk_prot->socks, as this field was copied
-        * with memcpy).
-        *
-        * This _changes_ the previous behaviour, where
-        * tcp_create_openreq_child always was incrementing the
-        * equivalent to tcp_prot->socks (inet_sock_nr), so this have
-        * to be taken into account in all callers. -acme
-        */
-       sk_refcnt_debug_inc(newsk);
        sk_set_socket(newsk, NULL);
        sk_tx_queue_clear(newsk);
        RCU_INIT_POINTER(newsk->sk_wq, NULL);
@@ -3710,8 +3699,6 @@ void sk_common_release(struct sock *sk)
 
        xfrm_sk_free_policy(sk);
 
-       sk_refcnt_debug_release(sk);
-
        sock_put(sk);
 }
 EXPORT_SYMBOL(sk_common_release);
index 2c778b013cb04b883c5e940e7450f41aa8faf0de..8db6747f892f8447e241b9a362f65c4cfe6fdbb0 100644 (file)
@@ -156,7 +156,6 @@ void inet_sock_destruct(struct sock *sk)
        kfree(rcu_dereference_protected(inet->inet_opt, 1));
        dst_release(rcu_dereference_protected(sk->sk_dst_cache, 1));
        dst_release(rcu_dereference_protected(sk->sk_rx_dst, 1));
-       sk_refcnt_debug_dec(sk);
 }
 EXPORT_SYMBOL(inet_sock_destruct);
 
@@ -357,8 +356,6 @@ lookup_protocol:
        inet->mc_list   = NULL;
        inet->rcv_tos   = 0;
 
-       sk_refcnt_debug_inc(sk);
-
        if (inet->inet_num) {
                /* It assumes that any protocol which allows
                 * the user to assign a number at socket
index 7d206a10ad14d89e2bab556b0fceded156dbe7c2..eedcf4146d29e72d5d184537a97bd124637bb314 100644 (file)
@@ -1199,8 +1199,6 @@ void inet_csk_destroy_sock(struct sock *sk)
 
        xfrm_sk_free_policy(sk);
 
-       sk_refcnt_debug_release(sk);
-
        this_cpu_dec(*sk->sk_prot->orphan_count);
 
        sock_put(sk);
index beed32fff484183f21e9d20834d67474e4565076..40052414c7c716c7c514e0395aa33dc538d1a8f7 100644 (file)
@@ -77,9 +77,6 @@ void inet_twsk_free(struct inet_timewait_sock *tw)
 {
        struct module *owner = tw->tw_prot->owner;
        twsk_destructor((struct sock *)tw);
-#ifdef SOCK_REFCNT_DEBUG
-       pr_debug("%s timewait_sock %p released\n", tw->tw_prot->name, tw);
-#endif
        kmem_cache_free(tw->tw_prot->twsk_prot->twsk_slab, tw);
        module_put(owner);
 }
index 847934763868bbdbecaf27672833bce67a4fbcbd..38689bedfce757e82bd0864e7605672ff2c34994 100644 (file)
@@ -239,16 +239,6 @@ lookup_protocol:
                inet->pmtudisc = IP_PMTUDISC_DONT;
        else
                inet->pmtudisc = IP_PMTUDISC_WANT;
-       /*
-        * Increment only the relevant sk_prot->socks debug field, this changes
-        * the previous behaviour of incrementing both the equivalent to
-        * answer->prot->socks (inet6_sock_nr) and inet_sock_nr.
-        *
-        * This allows better debug granularity as we'll know exactly how many
-        * UDPv6, TCPv6, etc socks were allocated, not the sum of all IPv6
-        * transport protocol socks. -acme
-        */
-       sk_refcnt_debug_inc(sk);
 
        if (inet->inet_num) {
                /* It assumes that any protocol which allows
index 9ce51680290b11abc334ce9dcb238d02223ec75d..2917dd8d198cba484ebcadd8b1c2947bdfd5a7f5 100644 (file)
@@ -464,13 +464,6 @@ int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
                        __ipv6_sock_mc_close(sk);
                        __ipv6_sock_ac_close(sk);
 
-                       /*
-                        * Sock is moving from IPv6 to IPv4 (sk_prot), so
-                        * remove it from the refcnt debug socks count in the
-                        * original family...
-                        */
-                       sk_refcnt_debug_dec(sk);
-
                        if (sk->sk_protocol == IPPROTO_TCP) {
                                struct inet_connection_sock *icsk = inet_csk(sk);
 
@@ -507,11 +500,6 @@ int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
 
                        inet6_cleanup_sock(sk);
 
-                       /*
-                        * ... and add it to the refcnt debug socks count
-                        * in the new family. -acme
-                        */
-                       sk_refcnt_debug_inc(sk);
                        module_put(THIS_MODULE);
                        retv = 0;
                        break;
index c9817aa0f4132cf71d7061be1e182ab1a45668e8..3ad9c46202fc63a5b3a870bf2ba994a8d9148264 100644 (file)
@@ -2875,7 +2875,6 @@ static void __mptcp_destroy_sock(struct sock *sk)
        sk_stream_kill_queues(sk);
        xfrm_sk_free_policy(sk);
 
-       sk_refcnt_debug_release(sk);
        sock_put(sk);
 }
 
index 8ffb19c643ab1ac1ec873f967490e6f2b31bed18..d4e76e2ae153ea3b3c7d73ef6ac2f8c2742f790d 100644 (file)
@@ -1335,8 +1335,6 @@ static void packet_sock_destruct(struct sock *sk)
                pr_err("Attempt to release alive packet socket: %p\n", sk);
                return;
        }
-
-       sk_refcnt_debug_dec(sk);
 }
 
 static bool fanout_flow_is_huge(struct packet_sock *po, struct sk_buff *skb)
@@ -3174,7 +3172,6 @@ static int packet_release(struct socket *sock)
 
        skb_queue_purge(&sk->sk_receive_queue);
        packet_free_pending(po);
-       sk_refcnt_debug_release(sk);
 
        sock_put(sk);
        return 0;
@@ -3364,7 +3361,6 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
        packet_cached_dev_reset(po);
 
        sk->sk_destruct = packet_sock_destruct;
-       sk_refcnt_debug_inc(sk);
 
        /*
         *      Attach a protocol block
index 097bd60ce964762686e86b79f2b1baf285ebfa17..62b436a2c8fef1e39b96ea3c46b814ba54b87bda 100644 (file)
@@ -807,8 +807,6 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
 
        newsk->sk_v6_rcv_saddr = sk->sk_v6_rcv_saddr;
 
-       sk_refcnt_debug_inc(newsk);
-
        if (newsk->sk_prot->init(newsk)) {
                sk_common_release(newsk);
                newsk = NULL;
index 909a89a1cff41b931ae033d691b74c4fbef6bd9a..c365df24ad331a2a88d39ccdbc6e8065bf3ac17b 100644 (file)
@@ -601,8 +601,6 @@ static struct sock *sctp_v4_create_accept_sk(struct sock *sk,
 
        newinet->inet_daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr;
 
-       sk_refcnt_debug_inc(newsk);
-
        if (newsk->sk_prot->init(newsk)) {
                sk_common_release(newsk);
                newsk = NULL;
index b163266e581ad38485e389d529cd437cc30fd7d8..d7a7420e81ec4ce81bf2ba816ae82ab986d5eaaf 100644 (file)
@@ -360,8 +360,6 @@ static void smc_destruct(struct sock *sk)
                return;
        if (!sock_flag(sk, SOCK_DEAD))
                return;
-
-       sk_refcnt_debug_dec(sk);
 }
 
 static struct sock *smc_sock_alloc(struct net *net, struct socket *sock,
@@ -390,7 +388,6 @@ static struct sock *smc_sock_alloc(struct net *net, struct socket *sock,
        spin_lock_init(&smc->accept_q_lock);
        spin_lock_init(&smc->conn.send_lock);
        sk->sk_prot->hash(sk);
-       sk_refcnt_debug_inc(sk);
        mutex_init(&smc->clcsock_release_lock);
        smc_init_saved_callbacks(smc);
 
index 9f0561b67c12e9079338ed44fa6442c608792950..a245c1b4a21b1aa22ce516f1fcde09a1c68ebd4a 100644 (file)
@@ -845,7 +845,6 @@ static int xsk_release(struct socket *sock)
        sock_orphan(sk);
        sock->sk = NULL;
 
-       sk_refcnt_debug_release(sk);
        sock_put(sk);
 
        return 0;
@@ -1396,8 +1395,6 @@ static void xsk_destruct(struct sock *sk)
 
        if (!xp_put_pool(xs->pool))
                xdp_put_umem(xs->umem, !xs->pool);
-
-       sk_refcnt_debug_dec(sk);
 }
 
 static int xsk_create(struct net *net, struct socket *sock, int protocol,
@@ -1427,7 +1424,6 @@ static int xsk_create(struct net *net, struct socket *sock, int protocol,
        sk->sk_family = PF_XDP;
 
        sk->sk_destruct = xsk_destruct;
-       sk_refcnt_debug_inc(sk);
 
        sock_set_flag(sk, SOCK_RCU_FREE);