diff options
| author | Jeff Layton <[email protected]> | 2025-06-18 14:24:21 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2025-06-20 00:02:04 +0000 |
| commit | 8f2079f8da5b6d4373d125a05cb076b0d6dc646b (patch) | |
| tree | efb7598a351a74c61cb0c4680ae5978b8c0b9ba7 /net/core/net_namespace.c | |
| parent | ref_tracker: add a way to create a symlink to the ref_tracker_dir debugfs file (diff) | |
| download | kernel-8f2079f8da5b6d4373d125a05cb076b0d6dc646b.tar.gz kernel-8f2079f8da5b6d4373d125a05cb076b0d6dc646b.zip | |
net: add symlinks to ref_tracker_dir for netns
After assigning the inode number to the namespace, use it to create a
unique name for each netns refcount tracker with the ns.inum and
net_cookie values in it, and register a symlink to the debugfs file for
it.
init_net is registered before the ref_tracker dir is created, so add a
late_initcall() to register its files and symlinks.
Signed-off-by: Jeff Layton <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'net/core/net_namespace.c')
| -rw-r--r-- | net/core/net_namespace.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index aa1e34181ed6..45de05d8f087 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -791,12 +791,40 @@ 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) +{ + ref_tracker_dir_symlink(&net->refcnt_tracker, "netns-%llx-%u-refcnt", + net->net_cookie, net->ns.inum); + ref_tracker_dir_symlink(&net->notrefcnt_tracker, "netns-%llx-%u-notrefcnt", + net->net_cookie, net->ns.inum); +} + +static int __init init_net_debugfs(void) +{ + ref_tracker_dir_debugfs(&init_net.refcnt_tracker); + ref_tracker_dir_debugfs(&init_net.notrefcnt_tracker); + 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) |
