[PATCH v2 8/8] net: register debugfs file for net_device refcnt tracker

Jeff Layton posted 8 patches 8 months, 1 week ago
There is a newer version of this series
[PATCH v2 8/8] net: register debugfs file for net_device refcnt tracker
Posted by Jeff Layton 8 months, 1 week ago
As a nearly-final step in register_netdevice(), finalize the name in the
refcount tracker, and register a debugfs file for it.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 net/core/dev.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 2f7f5fd9ffec7c0fc219eb6ba57d57a55134186e..a87488e127ed13fded156023de676851826a1a8f 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -10834,8 +10834,9 @@ static void netdev_free_phy_link_topology(struct net_device *dev)
  */
 int register_netdevice(struct net_device *dev)
 {
-	int ret;
 	struct net *net = dev_net(dev);
+	char name[64];
+	int ret;
 
 	BUILD_BUG_ON(sizeof(netdev_features_t) * BITS_PER_BYTE <
 		     NETDEV_FEATURE_COUNT);
@@ -10994,6 +10995,9 @@ int register_netdevice(struct net_device *dev)
 	    dev->rtnl_link_state == RTNL_LINK_INITIALIZED)
 		rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL, 0, NULL);
 
+	/* Register debugfs file for the refcount tracker */
+	if (snprintf(name, sizeof(name), "netdev-%s@%p", dev->name, dev) < sizeof(name))
+		ref_tracker_dir_debugfs(&dev->refcnt_tracker, name);
 out:
 	return ret;
 

-- 
2.49.0
Re: [PATCH v2 8/8] net: register debugfs file for net_device refcnt tracker
Posted by Kuniyuki Iwashima 8 months, 1 week ago
From: Jeff Layton <jlayton@kernel.org>
Date: Tue, 15 Apr 2025 14:49:46 -0400
> As a nearly-final step in register_netdevice(), finalize the name in the
> refcount tracker, and register a debugfs file for it.
> 
> Signed-off-by: Jeff Layton <jlayton@kernel.org>
> ---
>  net/core/dev.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 2f7f5fd9ffec7c0fc219eb6ba57d57a55134186e..a87488e127ed13fded156023de676851826a1a8f 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -10834,8 +10834,9 @@ static void netdev_free_phy_link_topology(struct net_device *dev)
>   */
>  int register_netdevice(struct net_device *dev)
>  {
> -	int ret;
>  	struct net *net = dev_net(dev);
> +	char name[64];
> +	int ret;
>  
>  	BUILD_BUG_ON(sizeof(netdev_features_t) * BITS_PER_BYTE <
>  		     NETDEV_FEATURE_COUNT);
> @@ -10994,6 +10995,9 @@ int register_netdevice(struct net_device *dev)
>  	    dev->rtnl_link_state == RTNL_LINK_INITIALIZED)
>  		rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL, 0, NULL);
>  
> +	/* Register debugfs file for the refcount tracker */
> +	if (snprintf(name, sizeof(name), "netdev-%s@%p", dev->name, dev) < sizeof(name))

Given IFNAMSIZ is 16, using WARN_ON_ONCE() and calling
ref_tracker_dir_debugfs() unconditionally would be better
to catch future regression with syzbot.

Also, this hunk conflicts with

commit 097f171f98289cf737437599c40b0d1e81266e9e
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Apr 9 18:42:46 2025 -0700

    net: convert dev->rtnl_link_state to a bool


> +		ref_tracker_dir_debugfs(&dev->refcnt_tracker, name);
>  out:
>  	return ret;
>  
> 
> -- 
> 2.49.0