Message ID | 20250417-reftrack-dbgfs-v3-7-c3159428c8fb@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ref_tracker: add ability to register a debugfs file for a ref_tracker_dir | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Guessing tree name failed - patch did not apply |
On Thu, Apr 17, 2025 at 09:11:10AM -0400, Jeff Layton wrote: > After assigning the inode number to the namespace, use it to create a > unique name for each netns refcount tracker and register the debugfs > files for them. > > init_net is registered before the ref_tracker dir is created, so add a > late_initcall() to register its files. > > Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com> > Signed-off-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 4303f2a4926243e2c0ff0c0387383cd8e0658019..cc8c3543e79b2b6948fdbe4080639e3dfbabda15 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -761,12 +761,44 @@ struct net *get_net_ns_by_pid(pid_t pid) } EXPORT_SYMBOL_GPL(get_net_ns_by_pid); +#ifdef CONFIG_NET_NS_REFCNT_TRACKER +static void net_ns_net_debugfs(struct net *net) +{ + char name[REF_TRACKER_NAMESZ]; + size_t len; + + len = snprintf(name, sizeof(name), "netns-%u-refcnt", net->ns.inum); + if (len < sizeof(name)) + ref_tracker_dir_debugfs(&net->refcnt_tracker, name); + + len = snprintf(name, sizeof(name), "netns-%u-notrefcnt", net->ns.inum); + if (len < sizeof(name)) + ref_tracker_dir_debugfs(&net->notrefcnt_tracker, name); +} + +static int __init init_net_debugfs(void) +{ + net_ns_net_debugfs(&init_net); + return 0; +} +late_initcall(init_net_debugfs); +#else +static void net_ns_net_debugfs(struct net *net) +{ +} +#endif + static __net_init int net_ns_net_init(struct net *net) { + int ret; + #ifdef CONFIG_NET_NS net->ns.ops = &netns_operations; #endif - return ns_alloc_inum(&net->ns); + ret = ns_alloc_inum(&net->ns); + if (!ret) + net_ns_net_debugfs(net); + return ret; } static __net_exit void net_ns_net_exit(struct net *net)