All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Christian Brauner <brauner@kernel.org>,
	linux-fsdevel@vger.kernel.org, Josef Bacik <josef@toxicpanda.com>,
	Jeff Layton <jlayton@kernel.org>
Cc: "Jann Horn" <jannh@google.com>, "Mike Yuan" <me@yhndnzj.com>,
	"Zbigniew Jędrzejewski-Szmek" <zbyszek@in.waw.pl>,
	"Lennart Poettering" <mzxreary@0pointer.de>,
	"Daan De Meyer" <daan.j.demeyer@gmail.com>,
	"Aleksa Sarai" <cyphar@cyphar.com>,
	"Amir Goldstein" <amir73il@gmail.com>,
	"Tejun Heo" <tj@kernel.org>,
	"Johannes Weiner" <hannes@cmpxchg.org>,
	"Alexander Viro" <viro@zeniv.linux.org.uk>,
	"Jan Kara" <jack@suse.cz>,
	linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
	bpf@vger.kernel.org, "Eric Dumazet" <edumazet@google.com>,
	"Jakub Kicinski" <kuba@kernel.org>,
	netdev@vger.kernel.org, "Arnd Bergmann" <arnd@arndb.de>,
	"Christian Brauner" <brauner@kernel.org>
Subject: Re: [PATCH v4 18/72] nstree: add unified namespace list
Date: Sat, 01 Nov 2025 20:20:50 +0100	[thread overview]
Message-ID: <87ecqhy2y5.ffs@tglx> (raw)
In-Reply-To: <20251029-work-namespace-nstree-listns-v4-18-2e6f823ebdc0@kernel.org>

Christian!

On Wed, Oct 29 2025 at 13:20, Christian Brauner wrote:
> --- a/kernel/time/namespace.c
> +++ b/kernel/time/namespace.c
> @@ -488,6 +488,7 @@ struct time_namespace init_time_ns = {
>  	.ns.ns_owner = LIST_HEAD_INIT(init_time_ns.ns.ns_owner),
>  	.frozen_offsets	= true,
>  	.ns.ns_list_node = LIST_HEAD_INIT(init_time_ns.ns.ns_list_node),
> +	.ns.ns_unified_list_node = LIST_HEAD_INIT(init_time_ns.ns.ns_unified_list_node),

Sorry that I did not catch that earlier, but

  1) this screws up the proper tabular struct initializer

  2) the churn of touching every compile time struct each time you add a
     new field and add the same stupid initialization to each of them
     can be avoided, when you do something like the uncompiled below.
     You get the idea.

Thanks,

        tglx
---
 fs/namespace.c            |    9 +--------
 include/linux/ns_common.h |   12 ++++++++++++
 init/version-timestamp.c  |    9 +--------
 ipc/msgutil.c             |    9 +--------
 kernel/pid.c              |    8 +-------
 kernel/time/namespace.c   |    9 +--------
 kernel/user.c             |    9 +--------
 7 files changed, 18 insertions(+), 47 deletions(-)

--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -5985,19 +5985,12 @@ SYSCALL_DEFINE4(listmount, const struct
 }
 
 struct mnt_namespace init_mnt_ns = {
-	.ns.inum	= ns_init_inum(&init_mnt_ns),
+	.ns		= NS_COMMON_INIT(init_mnt_ns, 1, 1),
 	.ns.ops		= &mntns_operations,
 	.user_ns	= &init_user_ns,
-	.ns.__ns_ref	= REFCOUNT_INIT(1),
-	.ns.__ns_ref_active = ATOMIC_INIT(1),
-	.ns.ns_type	= ns_common_type(&init_mnt_ns),
 	.passive	= REFCOUNT_INIT(1),
 	.mounts		= RB_ROOT,
 	.poll		= __WAIT_QUEUE_HEAD_INITIALIZER(init_mnt_ns.poll),
-	.ns.ns_list_node = LIST_HEAD_INIT(init_mnt_ns.ns.ns_list_node),
-	.ns.ns_unified_list_node = LIST_HEAD_INIT(init_mnt_ns.ns.ns_unified_list_node),
-	.ns.ns_owner_entry = LIST_HEAD_INIT(init_mnt_ns.ns.ns_owner_entry),
-	.ns.ns_owner = LIST_HEAD_INIT(init_mnt_ns.ns.ns_owner),
 };
 
 static void __init init_mount_tree(void)
--- a/include/linux/ns_common.h
+++ b/include/linux/ns_common.h
@@ -129,6 +129,18 @@ struct ns_common {
 	};
 };
 
+#define NS_COMMON_INIT(nsname, refs, active)						\
+{											\
+	.ns_type		= ns_common_type(&nsname),				\
+	.inum			= ns_init_inum(&nsname),				\
+	.__ns_ref		= REFCOUNT_INIT(refs),					\
+	.__ns_ref_active	= ATOMIC_INIT(active),					\
+	.ns_list_node		= LIST_HEAD_INIT(nsname.ns.ns_list_node),		\
+	.ns_unified_list_node	= LIST_HEAD_INIT(nsname.ns.ns_unified_list_node),	\
+	.ns_owner_entry		= LIST_HEAD_INIT(nsname.ns.ns_owner_entry),		\
+	.ns_owner		= LIST_HEAD_INIT(nsname.ns.ns_owner),			\
+}
+
 int __ns_common_init(struct ns_common *ns, u32 ns_type, const struct proc_ns_operations *ops, int inum);
 void __ns_common_free(struct ns_common *ns);
 
--- a/init/version-timestamp.c
+++ b/init/version-timestamp.c
@@ -8,9 +8,7 @@
 #include <linux/utsname.h>
 
 struct uts_namespace init_uts_ns = {
-	.ns.ns_type = ns_common_type(&init_uts_ns),
-	.ns.__ns_ref = REFCOUNT_INIT(2),
-	.ns.__ns_ref_active = ATOMIC_INIT(1),
+	.ns = NS_COMMON_INIT(init_uts_ns, 2, 1),
 	.name = {
 		.sysname	= UTS_SYSNAME,
 		.nodename	= UTS_NODENAME,
@@ -20,11 +18,6 @@ struct uts_namespace init_uts_ns = {
 		.domainname	= UTS_DOMAINNAME,
 	},
 	.user_ns = &init_user_ns,
-	.ns.inum = ns_init_inum(&init_uts_ns),
-	.ns.ns_list_node = LIST_HEAD_INIT(init_uts_ns.ns.ns_list_node),
-	.ns.ns_unified_list_node = LIST_HEAD_INIT(init_uts_ns.ns.ns_unified_list_node),
-	.ns.ns_owner_entry = LIST_HEAD_INIT(init_uts_ns.ns.ns_owner_entry),
-	.ns.ns_owner = LIST_HEAD_INIT(init_uts_ns.ns.ns_owner),
 #ifdef CONFIG_UTS_NS
 	.ns.ops = &utsns_operations,
 #endif
--- a/ipc/msgutil.c
+++ b/ipc/msgutil.c
@@ -27,18 +27,11 @@ DEFINE_SPINLOCK(mq_lock);
  * and not CONFIG_IPC_NS.
  */
 struct ipc_namespace init_ipc_ns = {
-	.ns.__ns_ref = REFCOUNT_INIT(1),
-	.ns.__ns_ref_active = ATOMIC_INIT(1),
+	.ns = NS_COMMON_INIT(init_ipc_ns, 1, 1),
 	.user_ns = &init_user_ns,
-	.ns.inum = ns_init_inum(&init_ipc_ns),
-	.ns.ns_list_node = LIST_HEAD_INIT(init_ipc_ns.ns.ns_list_node),
-	.ns.ns_unified_list_node = LIST_HEAD_INIT(init_ipc_ns.ns.ns_unified_list_node),
-	.ns.ns_owner_entry = LIST_HEAD_INIT(init_ipc_ns.ns.ns_owner_entry),
-	.ns.ns_owner = LIST_HEAD_INIT(init_ipc_ns.ns.ns_owner),
 #ifdef CONFIG_IPC_NS
 	.ns.ops = &ipcns_operations,
 #endif
-	.ns.ns_type = ns_common_type(&init_ipc_ns),
 };
 
 struct msg_msgseg {
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -71,18 +71,12 @@ static int pid_max_max = PID_MAX_LIMIT;
  * the scheme scales to up to 4 million PIDs, runtime.
  */
 struct pid_namespace init_pid_ns = {
-	.ns.__ns_ref = REFCOUNT_INIT(2),
-	.ns.__ns_ref_active = ATOMIC_INIT(1),
+	.ns = NS_COMMON_INIT(init_pid_ns, 2, 1),
 	.idr = IDR_INIT(init_pid_ns.idr),
 	.pid_allocated = PIDNS_ADDING,
 	.level = 0,
 	.child_reaper = &init_task,
 	.user_ns = &init_user_ns,
-	.ns.inum = ns_init_inum(&init_pid_ns),
-	.ns.ns_list_node = LIST_HEAD_INIT(init_pid_ns.ns.ns_list_node),
-	.ns.ns_unified_list_node = LIST_HEAD_INIT(init_pid_ns.ns.ns_unified_list_node),
-	.ns.ns_owner_entry = LIST_HEAD_INIT(init_pid_ns.ns.ns_owner_entry),
-	.ns.ns_owner = LIST_HEAD_INIT(init_pid_ns.ns.ns_owner),
 #ifdef CONFIG_PID_NS
 	.ns.ops = &pidns_operations,
 #endif
--- a/kernel/time/namespace.c
+++ b/kernel/time/namespace.c
@@ -478,17 +478,10 @@ const struct proc_ns_operations timens_f
 };
 
 struct time_namespace init_time_ns = {
-	.ns.ns_type	= ns_common_type(&init_time_ns),
-	.ns.__ns_ref	= REFCOUNT_INIT(3),
-	.ns.__ns_ref_active = ATOMIC_INIT(1),
+	.ns		= NS_COMMON_INIT(init_time_ns, 3, 1),
 	.user_ns	= &init_user_ns,
-	.ns.inum	= ns_init_inum(&init_time_ns),
 	.ns.ops		= &timens_operations,
-	.ns.ns_owner_entry = LIST_HEAD_INIT(init_time_ns.ns.ns_owner_entry),
-	.ns.ns_owner = LIST_HEAD_INIT(init_time_ns.ns.ns_owner),
 	.frozen_offsets	= true,
-	.ns.ns_list_node = LIST_HEAD_INIT(init_time_ns.ns.ns_list_node),
-	.ns.ns_unified_list_node = LIST_HEAD_INIT(init_time_ns.ns.ns_unified_list_node),
 };
 
 void __init time_ns_init(void)
--- a/kernel/user.c
+++ b/kernel/user.c
@@ -65,16 +65,9 @@ struct user_namespace init_user_ns = {
 			.nr_extents = 1,
 		},
 	},
-	.ns.ns_type = ns_common_type(&init_user_ns),
-	.ns.__ns_ref = REFCOUNT_INIT(3),
-	.ns.__ns_ref_active = ATOMIC_INIT(1),
+	.ns = NS_COMMON_INIT(init_user_ns, 3, 1),
 	.owner = GLOBAL_ROOT_UID,
 	.group = GLOBAL_ROOT_GID,
-	.ns.inum = ns_init_inum(&init_user_ns),
-	.ns.ns_list_node = LIST_HEAD_INIT(init_user_ns.ns.ns_list_node),
-	.ns.ns_unified_list_node = LIST_HEAD_INIT(init_user_ns.ns.ns_unified_list_node),
-	.ns.ns_owner_entry = LIST_HEAD_INIT(init_user_ns.ns.ns_owner_entry),
-	.ns.ns_owner = LIST_HEAD_INIT(init_user_ns.ns.ns_owner),
 #ifdef CONFIG_USER_NS
 	.ns.ops = &userns_operations,
 #endif

  reply	other threads:[~2025-11-01 19:20 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-29 12:20 [PATCH v4 00/72] nstree: listns() Christian Brauner
2025-10-29 12:20 ` [PATCH v4 01/72] libfs: allow to specify s_d_flags Christian Brauner
2025-10-29 12:20 ` [PATCH v4 02/72] nsfs: use inode_just_drop() Christian Brauner
2025-10-29 12:20 ` [PATCH v4 03/72] nsfs: raise DCACHE_DONTCACHE explicitly Christian Brauner
2025-10-29 12:20 ` [PATCH v4 04/72] pidfs: " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 05/72] nsfs: raise SB_I_NODEV and SB_I_NOEXEC Christian Brauner
2025-10-29 12:20 ` [PATCH v4 06/72] cgroup: add cgroup namespace to tree after owner is set Christian Brauner
2025-10-29 12:20 ` [PATCH v4 07/72] nstree: simplify return Christian Brauner
2025-10-29 12:20 ` [PATCH v4 08/72] ns: initialize ns_list_node for initial namespaces Christian Brauner
2025-10-29 12:20 ` [PATCH v4 09/72] ns: add __ns_ref_read() Christian Brauner
2025-10-29 12:20 ` [PATCH v4 10/72] ns: rename to exit_nsproxy_namespaces() Christian Brauner
2025-10-29 12:20 ` [PATCH v4 11/72] ns: add active reference count Christian Brauner
2025-10-29 12:20 ` [PATCH v4 12/72] ns: use anonymous struct to group list member Christian Brauner
2025-10-29 12:20 ` [PATCH v4 13/72] nstree: introduce a unified tree Christian Brauner
2025-10-29 14:44   ` kernel test robot
2025-10-29 14:55   ` kernel test robot
2025-10-29 12:20 ` [PATCH v4 14/72] nstree: allow lookup solely based on inode Christian Brauner
2025-10-29 12:20 ` [PATCH v4 15/72] nstree: assign fixed ids to the initial namespaces Christian Brauner
2025-10-29 12:20 ` [PATCH v4 16/72] nstree: maintain list of owned namespaces Christian Brauner
2025-10-29 12:20 ` [PATCH v4 17/72] nstree: simplify rbtree comparison helpers Christian Brauner
2025-10-30 13:48   ` Jeff Layton
2025-10-29 12:20 ` [PATCH v4 18/72] nstree: add unified namespace list Christian Brauner
2025-11-01 19:20   ` Thomas Gleixner [this message]
2025-11-03 11:21     ` Christian Brauner
2025-10-29 12:20 ` [PATCH v4 19/72] nstree: add listns() Christian Brauner
2025-10-29 12:20 ` [PATCH v4 20/72] arch: hookup listns() system call Christian Brauner
2025-10-29 12:20 ` [PATCH v4 21/72] nsfs: update tools header Christian Brauner
2025-10-29 12:20 ` [PATCH v4 22/72] selftests/filesystems: remove CLONE_NEWPIDNS from setup_userns() helper Christian Brauner
2025-10-29 12:20 ` [PATCH v4 23/72] selftests/namespaces: first active reference count tests Christian Brauner
2025-10-29 12:20 ` [PATCH v4 24/72] selftests/namespaces: second " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 25/72] selftests/namespaces: third " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 26/72] selftests/namespaces: fourth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 27/72] selftests/namespaces: fifth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 28/72] selftests/namespaces: sixth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 29/72] selftests/namespaces: seventh " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 30/72] selftests/namespaces: eigth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 31/72] selftests/namespaces: ninth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 32/72] selftests/namespaces: tenth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 33/72] selftests/namespaces: eleventh " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 34/72] selftests/namespaces: twelth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 35/72] selftests/namespaces: thirteenth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 36/72] selftests/namespaces: fourteenth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 37/72] selftests/namespaces: fifteenth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 38/72] selftests/namespaces: add listns() wrapper Christian Brauner
2025-10-29 12:20 ` [PATCH v4 39/72] selftests/namespaces: first listns() test Christian Brauner
2025-10-29 12:20 ` [PATCH v4 40/72] selftests/namespaces: second " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 41/72] selftests/namespaces: third " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 42/72] selftests/namespaces: fourth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 43/72] selftests/namespaces: fifth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 44/72] selftests/namespaces: sixth " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 45/72] selftests/namespaces: seventh " Christian Brauner
2025-10-29 12:20 ` [PATCH v4 46/72] selftests/namespaces: eigth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 47/72] selftests/namespaces: ninth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 48/72] selftests/namespaces: first listns() permission test Christian Brauner
2025-10-29 12:21 ` [PATCH v4 49/72] selftests/namespaces: second " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 50/72] selftests/namespaces: third " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 51/72] selftests/namespaces: fourth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 52/72] selftests/namespaces: fifth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 53/72] selftests/namespaces: sixth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 54/72] selftests/namespaces: seventh " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 55/72] selftests/namespaces: first inactive namespace resurrection test Christian Brauner
2025-10-29 12:21 ` [PATCH v4 56/72] selftests/namespaces: second " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 57/72] selftests/namespaces: third " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 58/72] selftests/namespaces: fourth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 59/72] selftests/namespaces: fifth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 60/72] selftests/namespaces: sixth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 61/72] selftests/namespaces: seventh " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 62/72] selftests/namespaces: eigth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 63/72] selftests/namespaces: ninth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 64/72] selftests/namespaces: tenth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 65/72] selftests/namespaces: eleventh " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 66/72] selftests/namespaces: twelth " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 67/72] selftests/namespace: first threaded active reference count test Christian Brauner
2025-10-29 12:21 ` [PATCH v4 68/72] selftests/namespace: second " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 69/72] selftests/namespace: third " Christian Brauner
2025-10-29 12:21 ` [PATCH v4 70/72] selftests/namespace: commit_creds() active reference tests Christian Brauner
2025-10-29 12:21 ` [PATCH v4 71/72] selftests/namespace: add stress test Christian Brauner
2025-10-29 12:21 ` [PATCH v4 72/72] selftests/namespace: test listns() pagination Christian Brauner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ecqhy2y5.ffs@tglx \
    --to=tglx@linutronix.de \
    --cc=amir73il@gmail.com \
    --cc=arnd@arndb.de \
    --cc=bpf@vger.kernel.org \
    --cc=brauner@kernel.org \
    --cc=cgroups@vger.kernel.org \
    --cc=cyphar@cyphar.com \
    --cc=daan.j.demeyer@gmail.com \
    --cc=edumazet@google.com \
    --cc=hannes@cmpxchg.org \
    --cc=jack@suse.cz \
    --cc=jannh@google.com \
    --cc=jlayton@kernel.org \
    --cc=josef@toxicpanda.com \
    --cc=kuba@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=me@yhndnzj.com \
    --cc=mzxreary@0pointer.de \
    --cc=netdev@vger.kernel.org \
    --cc=tj@kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=zbyszek@in.waw.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.