Message ID | 20250415-reftrack-dbgfs-v2-6-b18c4abd122f@kernel.org (mailing list archive) |
---|---|
State | Changes Requested |
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 |
From: Jeff Layton <jlayton@kernel.org> Date: Tue, 15 Apr 2025 14:49:44 -0400 > 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. > > The init_net is registered early in the boot process before the > ref_tracker dir is created, so add a late_initcall() to register its > files. > > Signed-off-by: Jeff Layton <jlayton@kernel.org> > --- > net/core/net_namespace.c | 34 +++++++++++++++++++++++++++++++++- > 1 file changed, 33 insertions(+), 1 deletion(-) > > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index 4303f2a4926243e2c0ff0c0387383cd8e0658019..f636eb9b8eba28114fd192d64bcd359a25381988 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[32]; Perhaps define REF_TRACKER_NAMESZ (I'm really bad at naming) and reuse it in the next two patches ? Otherwise looks good to me. Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 4303f2a4926243e2c0ff0c0387383cd8e0658019..f636eb9b8eba28114fd192d64bcd359a25381988 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[32]; + 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)
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. The init_net is registered early in the boot process before the ref_tracker dir is created, so add a late_initcall() to register its files. Signed-off-by: Jeff Layton <jlayton@kernel.org> --- net/core/net_namespace.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)