All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@kernel.org>
To: Christian Brauner <brauner@kernel.org>
Cc: Jan Kara <jack@suse.cz>, Andreas Hindborg <a.hindborg@kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-nvme@lists.infradead.org,
	Hannes Reinecke <hare@kernel.org>
Subject: [RFC PATCH 0/8] namespace-aware configfs
Date: Sat, 13 Jun 2026 13:14:29 +0200	[thread overview]
Message-ID: <20260613111437.101763-1-hare@kernel.org> (raw)

Hey all,

during discussions at LSF/MM I thought it would be quite helpful
to make configfs namespace aware, such that one could do:

unshare --mnt
mount -t configfs none /sys/kernel/config

and get a new instance of configfs. This will allow to have distinct
configurations for each namespace.
This is particularly helpful if you want to run eg nvmet in a container;
with this patchset each container can have its own configuration, and
one can simulate a multi-node nvmet cluster using containers.

How it works:
The configfs 'root' entries are stored in 'configfs_super_info' which
is stored in an xarray using the namespace ID as the index.
A configfs subsystem can be converted to be namespace aware by implementing
the new subsyste callbacks 'fill_subsystem()' and 'clear_subsystem', which
are responsible for populating the subsystem structure.
Upon registration via 'register_subsystem()' the subsystem is put in a
linked list within 'configfs_super_info'. So when mount() is called from
a different namespace this list is traversed, and new subsystems are created
in the new namespace using the callbacks.

Open Issues:
- I've added a new function 'mnt_clone_direct()' to clone the vfsmount
  entry (the original code just did a simple_pin_fs()). Not sure if
  that's correct. Christian?
- The current cloning mechanism is not really a hierarchy, but rather
  always using the default namespace to find registered subsystems.
  Meaning you can only call 'register_subsystem()' for the default
  namespace. But then one shouldn't call modprobe in a container, so
  that's okay I guess.
- The original content of the configfs remains visible even from
  within the container, and the new 'mount' will just overlay that.
  Ideally I would have the container start off with an empty
  /sys/kernel/config to avoid configuration issues. But again I've
  no idea how to do that (or if it's even possible).

Otherwise, as usual, commands and reviews are welcome.

Hannes Reinecke (8):
  fs/configfs: rework configfs_is_root()
  fs/configfs: dynamically allocate super_info
  fs/configfs: separate out configfs_{link,unlink}_root()
  fs/namespace: implement mnt_clone_direct()
  fs/configfs: add superblock as attribute to configfs_pin_fs()
  fs/configfs: add 'fill_subsystem' and 'clear_subsystem' callbacks
  fs/configfs: switch to get_tree_keyed()
  nvmet: make configfs setup namespace aware

 drivers/nvme/target/configfs.c  | 183 ++++++++++++++++++++++-----
 drivers/nvme/target/core.c      |  35 +++---
 drivers/nvme/target/discovery.c | 101 +++++++++++----
 drivers/nvme/target/nvmet.h     |  13 +-
 fs/configfs/configfs_internal.h |  21 +++-
 fs/configfs/dir.c               | 167 +++++++++++++++++++-----
 fs/configfs/mount.c             | 216 +++++++++++++++++++++++++++-----
 fs/namespace.c                  |  11 ++
 include/linux/configfs.h        |   7 ++
 include/linux/mount.h           |   1 +
 11 files changed, 615 insertions(+), 144 deletions(-)

-- 
2.51.0


             reply	other threads:[~2026-06-13 11:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-13 11:14 Hannes Reinecke [this message]
2026-06-13 11:14 ` [PATCH 1/8] fs/configfs: rework configfs_is_root() Hannes Reinecke
2026-06-13 11:14 ` [PATCH 2/8] fs/configfs: dynamically allocate super_info Hannes Reinecke
2026-06-13 11:14 ` [PATCH 3/8] fs/configfs: separate out configfs_{link,unlink}_root() Hannes Reinecke
2026-06-13 11:14 ` [PATCH 4/8] fs/namespace: implement mnt_clone_direct() Hannes Reinecke
2026-06-13 11:14 ` [PATCH 5/8] fs/configfs: add superblock as attribute to configfs_pin_fs() Hannes Reinecke
2026-06-13 11:14 ` [PATCH 6/8] fs/configfs: add 'fill_subsystem' and 'clear_subsystem' callbacks Hannes Reinecke
2026-06-13 11:14 ` [PATCH 7/8] fs/configfs: switch to get_tree_keyed() Hannes Reinecke
2026-06-13 11:14 ` [PATCH 8/8] nvmet: make configfs setup namespace aware Hannes Reinecke

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=20260613111437.101763-1-hare@kernel.org \
    --to=hare@kernel.org \
    --cc=a.hindborg@kernel.org \
    --cc=brauner@kernel.org \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    /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.