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@suse.de>
Subject: [PATCH 3/8] fs/configfs: separate out configfs_{link,unlink}_root()
Date: Sat, 13 Jun 2026 13:14:32 +0200 [thread overview]
Message-ID: <20260613111437.101763-4-hare@kernel.org> (raw)
In-Reply-To: <20260613111437.101763-1-hare@kernel.org>
From: Hannes Reinecke <hare@suse.de>
Separate out functions to link and unlink subsystem groups.
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
fs/configfs/dir.c | 61 +++++++++++++++++++++++++++++------------------
1 file changed, 38 insertions(+), 23 deletions(-)
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
index 57719bee0c07..cf89c76ea7e6 100644
--- a/fs/configfs/dir.c
+++ b/fs/configfs/dir.c
@@ -1831,31 +1831,19 @@ void configfs_unregister_default_group(struct config_group *group)
}
EXPORT_SYMBOL(configfs_unregister_default_group);
-int configfs_register_subsystem(struct configfs_subsystem *subsys)
+static int configfs_link_root(struct configfs_super_info *info,
+ struct configfs_subsystem *subsys,
+ struct dentry *root)
{
- struct configfs_super_info *info = configfs_get_super_info(0);
struct config_group *group = &subsys->su_group;
struct dentry *dentry;
- struct dentry *root;
struct configfs_dirent *sd;
struct configfs_fragment *frag;
int err;
- if (IS_ERR(info))
- return PTR_ERR(info);
-
frag = new_fragment();
- if (!frag) {
- configfs_put_super_info(info);
+ if (!frag)
return -ENOMEM;
- }
-
- root = configfs_pin_fs();
- if (IS_ERR(root)) {
- put_fragment(frag);
- configfs_put_super_info(info);
- return PTR_ERR(root);
- }
if (!group->cg_item.ci_name)
group->cg_item.ci_name = group->cg_item.ci_namebuf;
@@ -1894,29 +1882,46 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
mutex_lock(&info->subsys_mutex);
unlink_group(group);
mutex_unlock(&info->subsys_mutex);
- configfs_release_fs();
}
put_fragment(frag);
- configfs_put_super_info(info);
return err;
}
-void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
+int configfs_register_subsystem(struct configfs_subsystem *subsys)
{
struct configfs_super_info *info = configfs_get_super_info(0);
+ struct dentry *root;
+ int err;
+
+ if (WARN_ON(IS_ERR(info)))
+ return PTR_ERR(info);
+
+ root = configfs_pin_fs();
+ if (IS_ERR(root)) {
+ err = PTR_ERR(root);
+ goto out_put;
+ }
+
+ err = configfs_link_root(info, subsys, root);
+ if (err)
+ configfs_release_fs();
+
+out_put:
+ configfs_put_super_info(info);
+ return err;
+}
+
+static void configfs_unlink_root(struct configfs_subsystem *subsys)
+{
struct config_group *group = &subsys->su_group;
struct dentry *dentry = dget(group->cg_item.ci_dentry);
struct dentry *root = dentry->d_sb->s_root;
struct configfs_dirent *sd = dentry->d_fsdata;
struct configfs_fragment *frag = sd->s_frag;
- if (WARN_ON(IS_ERR(info)))
- return;
-
if (dentry->d_parent != root) {
pr_err("Tried to unregister non-subsystem!\n");
dput(dentry);
- configfs_put_super_info(info);
return;
}
@@ -1945,8 +1950,18 @@ void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
inode_unlock(d_inode(root));
dput(dentry);
+}
+
+void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
+{
+ struct configfs_super_info *info = configfs_get_super_info(0);
+ struct config_group *group = &subsys->su_group;
+
+ if (WARN_ON(IS_ERR(info)))
+ return;
mutex_lock(&info->subsys_mutex);
+ configfs_unlink_root(subsys);
unlink_group(group);
mutex_unlock(&info->subsys_mutex);
configfs_release_fs();
--
2.51.0
next prev parent 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 [RFC PATCH 0/8] namespace-aware configfs Hannes Reinecke
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 ` Hannes Reinecke [this message]
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-4-hare@kernel.org \
--to=hare@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=brauner@kernel.org \
--cc=hare@suse.de \
--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.