public inbox for linux-fsdevel@vger.kernel.org
 help / color / mirror / Atom feed
From: Christian Brauner <brauner@kernel.org>
To: linux-fsdevel@vger.kernel.org,
	 Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	 Jens Axboe <axboe@kernel.dk>, Jan Kara <jack@suse.cz>,
	 Tejun Heo <tj@kernel.org>, Jann Horn <jannh@google.com>,
	 Christian Brauner <brauner@kernel.org>
Subject: [PATCH RFC DRAFT POC 05/11] fs: add LOOKUP_IN_INIT
Date: Tue, 03 Mar 2026 14:49:16 +0100	[thread overview]
Message-ID: <20260303-work-kthread-nullfs-v1-5-87e559b94375@kernel.org> (raw)
In-Reply-To: <20260303-work-kthread-nullfs-v1-0-87e559b94375@kernel.org>

Add a new LOOKUP_IN_INIT flag that causes the lookup to be performed
relative to userspace init's root or working directory. This will be
used to force kthreads to be isolated in nullfs and explicitly opt-in to
lookup stuff in init's filesystem state.

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 fs/namei.c            | 17 ++++++++++++++---
 include/linux/namei.h |  3 ++-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/fs/namei.c b/fs/namei.c
index 58f715f7657e..dd2710d5f5df 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1099,7 +1099,12 @@ static int complete_walk(struct nameidata *nd)
 
 static int set_root(struct nameidata *nd)
 {
-	struct fs_struct *fs = current->fs;
+	struct fs_struct *fs;
+
+	if (nd->flags & LOOKUP_IN_INIT)
+		fs = &init_fs;
+	else
+		fs = current->fs;
 
 	/*
 	 * Jumping to the real root in a scoped-lookup is a BUG in namei, but we
@@ -2716,8 +2721,14 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
 
 	/* Relative pathname -- get the starting-point it is relative to. */
 	if (nd->dfd == AT_FDCWD) {
+		struct fs_struct *fs;
+
+		if (nd->flags & LOOKUP_IN_INIT)
+			fs = &init_fs;
+		else
+			fs = current->fs;
+
 		if (flags & LOOKUP_RCU) {
-			struct fs_struct *fs = current->fs;
 			unsigned seq;
 
 			do {
@@ -2727,7 +2738,7 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
 				nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
 			} while (read_seqretry(&fs->seq, seq));
 		} else {
-			get_fs_pwd(current->fs, &nd->path);
+			get_fs_pwd(fs, &nd->path);
 			nd->inode = nd->path.dentry->d_inode;
 		}
 	} else {
diff --git a/include/linux/namei.h b/include/linux/namei.h
index 58600cf234bc..072533ec367b 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -46,9 +46,10 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT};
 #define LOOKUP_NO_XDEV		BIT(26) /* No mountpoint crossing. */
 #define LOOKUP_BENEATH		BIT(27) /* No escaping from starting point. */
 #define LOOKUP_IN_ROOT		BIT(28) /* Treat dirfd as fs root. */
+#define LOOKUP_IN_INIT		BIT(29) /* Lookup in init's namespace. */
 /* LOOKUP_* flags which do scope-related checks based on the dirfd. */
 #define LOOKUP_IS_SCOPED (LOOKUP_BENEATH | LOOKUP_IN_ROOT)
-/* 3 spare bits for scoping */
+/* 2 spare bits for scoping */
 
 extern int path_pts(struct path *path);
 

-- 
2.47.3


  parent reply	other threads:[~2026-03-03 13:49 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-03 13:49 [PATCH RFC DRAFT POC 00/11] fs,kthread: isolate all kthreads in nullfs Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 01/11] kthread: refactor __kthread_create_on_node() to take a struct argument Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 02/11] kthread: remove unused flags argument from kthread worker creation API Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 03/11] kthread: add extensible kthread_create()/kthread_run() pattern Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 04/11] fs: notice when init abandons fs sharing Christian Brauner
2026-03-03 13:49 ` Christian Brauner [this message]
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 06/11] fs: add file_open_init() Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 07/11] block: add bdev_file_open_init() Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 08/11] fs: allow to pass lookup flags to filename_*() Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 09/11] fs: add init_root() Christian Brauner
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 10/11] tree-wide: make all kthread path lookups to use LOOKUP_IN_INIT Christian Brauner
2026-03-03 15:03   ` Christoph Hellwig
2026-03-03 13:49 ` [PATCH RFC DRAFT POC 11/11] fs: isolate all kthreads in nullfs Christian Brauner
2026-03-06  7:26 ` [PATCH RFC DRAFT POC 00/11] fs,kthread: " Askar Safin

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=20260303-work-kthread-nullfs-v1-5-87e559b94375@kernel.org \
    --to=brauner@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=jack@suse.cz \
    --cc=jannh@google.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox