]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs: retire sget()
authorChristian Brauner <brauner@kernel.org>
Fri, 29 May 2026 08:43:43 +0000 (10:43 +0200)
committerChristian Brauner <brauner@kernel.org>
Wed, 3 Jun 2026 07:09:51 +0000 (09:09 +0200)
sget() and sget_fc() have lived side by side as near-duplicate
find-or-create-and-publish helpers for the legacy and fs_context mount
APIs. The three remaining in-tree callers (CIFS plus the ext4 extents
and mballoc KUnit tests) have all been moved to sget_fc(). Nothing
calls sget() anymore.

Delete sget() from fs/super.c and the prototype in <linux/fs.h>.
Update the two comments that referred to "sget()" or "sget{_fc}()" to
just say "sget_fc()".

This removes ~60 lines of code that only existed to be kept in
lockstep with sget_fc() on every superblock publish-path change.

Link: https://patch.msgid.link/20260529-work-sget-v2-4-57bbe08604e4@kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
fs/btrfs/super.c
fs/super.c
include/linux/fs.h

index b26aa9169e83884984e11d23b0ec55cbf8769977..636154861d7cf75c6199732410e3c45d6d4e02a3 100644 (file)
@@ -2052,7 +2052,7 @@ static int btrfs_get_tree_subvol(struct fs_context *fc)
         * then open_ctree will properly initialize the file system specific
         * settings later.  btrfs_init_fs_info initializes the static elements
         * of the fs_info (locks and such) to make cleanup easier if we find a
-        * superblock with our given fs_devices later on at sget() time.
+        * superblock with our given fs_devices later on at sget_fc() time.
         */
        fs_info = kvzalloc_obj(struct btrfs_fs_info);
        if (!fs_info)
index 378e81efe643bd3c8156f5fa2c1b64419fd7bb23..5fe8cea9f8fee8e99f4481f06871055cbd1b6ca8 100644 (file)
@@ -328,7 +328,7 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags,
        init_rwsem(&s->s_umount);
        lockdep_set_class(&s->s_umount, &type->s_umount_key);
        /*
-        * sget() can have s_umount recursion.
+        * sget_fc() can have s_umount recursion.
         *
         * When it cannot find a suitable sb, it allocates a new
         * one (this one), and tries again to find a suitable old
@@ -439,7 +439,7 @@ static void kill_super_notify(struct super_block *sb)
 
        /*
         * Remove it from @fs_supers so it isn't found by new
-        * sget{_fc}() walkers anymore. Any concurrent mounter still
+        * sget_fc() walkers anymore. Any concurrent mounter still
         * managing to grab a temporary reference is guaranteed to
         * already see SB_DYING and will wait until we notify them about
         * SB_DEAD.
@@ -517,7 +517,7 @@ EXPORT_SYMBOL(deactivate_super);
  * @sb: superblock to acquire
  *
  * Acquire a temporary reference on a superblock and try to trade it for
- * an active reference. This is used in sget{_fc}() to wait for a
+ * an active reference. This is used in sget_fc() to wait for a
  * superblock to either become SB_BORN or for it to pass through
  * sb->kill() and be marked as SB_DEAD.
  *
@@ -673,11 +673,11 @@ void generic_shutdown_super(struct super_block *sb)
        /*
         * Broadcast to everyone that grabbed a temporary reference to this
         * superblock before we removed it from @fs_supers that the superblock
-        * is dying. Every walker of @fs_supers outside of sget{_fc}() will now
+        * is dying. Every walker of @fs_supers outside of sget_fc() will now
         * discard this superblock and treat it as dead.
         *
         * We leave the superblock on @fs_supers so it can be found by
-        * sget{_fc}() until we passed sb->kill_sb().
+        * sget_fc() until we passed sb->kill_sb().
         */
        super_wake(sb, SB_DYING);
        super_unlock_excl(sb);
@@ -808,67 +808,6 @@ share_extant_sb:
 }
 EXPORT_SYMBOL(sget_fc);
 
-/**
- *     sget    -       find or create a superblock
- *     @type:    filesystem type superblock should belong to
- *     @test:    comparison callback
- *     @set:     setup callback
- *     @flags:   mount flags
- *     @data:    argument to each of them
- */
-struct super_block *sget(struct file_system_type *type,
-                       int (*test)(struct super_block *,void *),
-                       int (*set)(struct super_block *,void *),
-                       int flags,
-                       void *data)
-{
-       struct user_namespace *user_ns = current_user_ns();
-       struct super_block *s = NULL;
-       struct super_block *old;
-       int err;
-
-retry:
-       spin_lock(&sb_lock);
-       if (test) {
-               hlist_for_each_entry(old, &type->fs_supers, s_instances) {
-                       if (!test(old, data))
-                               continue;
-                       if (user_ns != old->s_user_ns) {
-                               spin_unlock(&sb_lock);
-                               destroy_unused_super(s);
-                               return ERR_PTR(-EBUSY);
-                       }
-                       if (!grab_super(old))
-                               goto retry;
-                       destroy_unused_super(s);
-                       return old;
-               }
-       }
-       if (!s) {
-               spin_unlock(&sb_lock);
-               s = alloc_super(type, flags, user_ns);
-               if (!s)
-                       return ERR_PTR(-ENOMEM);
-               goto retry;
-       }
-
-       err = set(s, data);
-       if (err) {
-               spin_unlock(&sb_lock);
-               destroy_unused_super(s);
-               return ERR_PTR(err);
-       }
-       s->s_type = type;
-       strscpy(s->s_id, type->name, sizeof(s->s_id));
-       list_add_tail(&s->s_list, &super_blocks);
-       hlist_add_head(&s->s_instances, &type->fs_supers);
-       spin_unlock(&sb_lock);
-       get_filesystem(type);
-       shrinker_register(s->s_shrink);
-       return s;
-}
-EXPORT_SYMBOL(sget);
-
 void drop_super(struct super_block *sb)
 {
        super_unlock_shared(sb);
index 11559c513dfbb2f9bf15a8c7516f031aab3e094f..6dbe3218dc1e2737852ec1c14b5266c678dfd5dc 100644 (file)
@@ -2327,10 +2327,6 @@ void free_anon_bdev(dev_t);
 struct super_block *sget_fc(struct fs_context *fc,
                            int (*test)(struct super_block *, struct fs_context *),
                            int (*set)(struct super_block *, struct fs_context *));
-struct super_block *sget(struct file_system_type *type,
-                       int (*test)(struct super_block *,void *),
-                       int (*set)(struct super_block *,void *),
-                       int flags, void *data);
 struct super_block *sget_dev(struct fs_context *fc, dev_t dev);
 
 /* Alas, no aliases. Too much hassle with bringing module.h everywhere */