[PATCH 12/19] fs: convert kill_litter_super to litter_shutdown_sb

From: Christoph Hellwig
Date: Wed Sep 13 2023 - 07:11:43 EST


Replace kill_litter_super with litter_shutdown_sb, which is wired up to
the ->shutdown_sb method. For file systems that wrapped
kill_litter_super, ->kill_sb is replaced with ->shutdown and ->free_sb
methods as needed.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
arch/powerpc/platforms/cell/spufs/inode.c | 10 +++++-----
arch/s390/hypfs/inode.c | 6 +++---
drivers/android/binderfs.c | 12 +++---------
drivers/base/devtmpfs.c | 8 ++++----
drivers/infiniband/hw/qib/qib_fs.c | 2 +-
drivers/misc/ibmasm/ibmasmfs.c | 8 ++++----
drivers/usb/gadget/function/f_fs.c | 6 +++---
drivers/usb/gadget/legacy/inode.c | 12 ++++++------
drivers/xen/xenfs/super.c | 8 ++++----
fs/binfmt_misc.c | 8 ++++----
fs/configfs/mount.c | 8 ++++----
fs/debugfs/inode.c | 8 ++++----
fs/devpts/inode.c | 6 +++---
fs/efivarfs/super.c | 13 ++++++-------
fs/fuse/control.c | 12 ++++++------
fs/hugetlbfs/inode.c | 2 +-
fs/nfsd/nfsctl.c | 22 ++++++++++++----------
fs/ocfs2/dlmfs/dlmfs.c | 2 +-
fs/pstore/inode.c | 7 +++----
fs/ramfs/inode.c | 6 +++---
fs/super.c | 14 +++++++++++---
fs/tracefs/inode.c | 2 +-
include/linux/fs.h | 2 +-
include/linux/ramfs.h | 2 +-
init/do_mounts.c | 6 +++---
ipc/mqueue.c | 2 +-
kernel/bpf/inode.c | 2 +-
mm/shmem.c | 5 +++--
net/sunrpc/rpc_pipe.c | 19 ++++++++++++-------
security/inode.c | 8 ++++----
security/selinux/selinuxfs.c | 15 +++++----------
security/smack/smackfs.c | 6 +++---
32 files changed, 126 insertions(+), 123 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spufs/inode.c b/arch/powerpc/platforms/cell/spufs/inode.c
index 38c5be34c8951f..2610a0731ea242 100644
--- a/arch/powerpc/platforms/cell/spufs/inode.c
+++ b/arch/powerpc/platforms/cell/spufs/inode.c
@@ -763,11 +763,11 @@ static int spufs_init_fs_context(struct fs_context *fc)
}

static struct file_system_type spufs_type = {
- .owner = THIS_MODULE,
- .name = "spufs",
- .init_fs_context = spufs_init_fs_context,
- .parameters = spufs_fs_parameters,
- .kill_sb = kill_litter_super,
+ .owner = THIS_MODULE,
+ .name = "spufs",
+ .init_fs_context = spufs_init_fs_context,
+ .parameters = spufs_fs_parameters,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("spufs");

diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
index 3261fb9cade648..f18e3b844c5d9b 100644
--- a/arch/s390/hypfs/inode.c
+++ b/arch/s390/hypfs/inode.c
@@ -294,9 +294,8 @@ static int hypfs_init_fs_context(struct fs_context *fc)
return 0;
}

-static void hypfs_kill_super(struct super_block *sb)
+static void hypfs_free_sb(struct super_block *sb)
{
- kill_litter_super(sb);
kfree(sb->s_fs_info);
}

@@ -417,7 +416,8 @@ static struct file_system_type hypfs_type = {
.name = "s390_hypfs",
.init_fs_context = hypfs_init_fs_context,
.parameters = hypfs_fs_parameters,
- .kill_sb = hypfs_kill_super
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = hypfs_free_sb,
};

static const struct super_operations hypfs_s_ops = {
diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c
index 81effec17b3d63..f48196391239c0 100644
--- a/drivers/android/binderfs.c
+++ b/drivers/android/binderfs.c
@@ -771,19 +771,12 @@ static int binderfs_init_fs_context(struct fs_context *fc)
return 0;
}

-static void binderfs_kill_super(struct super_block *sb)
+static void binderfs_free_sb(struct super_block *sb)
{
struct binderfs_info *info = sb->s_fs_info;

- /*
- * During inode eviction struct binderfs_info is needed.
- * So first wipe the super_block then free struct binderfs_info.
- */
- kill_litter_super(sb);
-
if (info && info->ipc_ns)
put_ipc_ns(info->ipc_ns);
-
kfree(info);
}

@@ -791,7 +784,8 @@ static struct file_system_type binder_fs_type = {
.name = "binder",
.init_fs_context = binderfs_init_fs_context,
.parameters = binderfs_fs_parameters,
- .kill_sb = binderfs_kill_super,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = binderfs_free_sb,
.fs_flags = FS_USERNS_MOUNT,
};

diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c
index b848764ef0187f..f5b43c7877815b 100644
--- a/drivers/base/devtmpfs.c
+++ b/drivers/base/devtmpfs.c
@@ -80,13 +80,13 @@ static struct dentry *public_dev_mount(struct file_system_type *fs_type, int fla
}

static struct file_system_type internal_fs_type = {
- .name = "devtmpfs",
+ .name = "devtmpfs",
#ifdef CONFIG_TMPFS
- .init_fs_context = shmem_init_fs_context,
+ .init_fs_context = shmem_init_fs_context,
#else
- .init_fs_context = ramfs_init_fs_context,
+ .init_fs_context = ramfs_init_fs_context,
#endif
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
};

static struct file_system_type dev_fs_type = {
diff --git a/drivers/infiniband/hw/qib/qib_fs.c b/drivers/infiniband/hw/qib/qib_fs.c
index c52ca34b32e67d..ea0aeade92bbd0 100644
--- a/drivers/infiniband/hw/qib/qib_fs.c
+++ b/drivers/infiniband/hw/qib/qib_fs.c
@@ -473,7 +473,7 @@ static struct file_system_type qibfs_fs_type = {
.owner = THIS_MODULE,
.name = "ipathfs",
.init_fs_context = qibfs_init_fs_context,
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("ipathfs");

diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c
index 5867af9f592cdb..05d03f9b600366 100644
--- a/drivers/misc/ibmasm/ibmasmfs.c
+++ b/drivers/misc/ibmasm/ibmasmfs.c
@@ -100,10 +100,10 @@ static const struct super_operations ibmasmfs_s_ops = {
static const struct file_operations *ibmasmfs_dir_ops = &simple_dir_operations;

static struct file_system_type ibmasmfs_type = {
- .owner = THIS_MODULE,
- .name = "ibmasmfs",
- .init_fs_context = ibmasmfs_init_fs_context,
- .kill_sb = kill_litter_super,
+ .owner = THIS_MODULE,
+ .name = "ibmasmfs",
+ .init_fs_context = ibmasmfs_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("ibmasmfs");

diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
index 6e9ef35a43a7ba..83eaed3f1a8e0b 100644
--- a/drivers/usb/gadget/function/f_fs.c
+++ b/drivers/usb/gadget/function/f_fs.c
@@ -1602,9 +1602,8 @@ static int ffs_fs_init_fs_context(struct fs_context *fc)
}

static void
-ffs_fs_kill_sb(struct super_block *sb)
+ffs_fs_free_sb(struct super_block *sb)
{
- kill_litter_super(sb);
if (sb->s_fs_info)
ffs_data_closed(sb->s_fs_info);
}
@@ -1614,7 +1613,8 @@ static struct file_system_type ffs_fs_type = {
.name = "functionfs",
.init_fs_context = ffs_fs_init_fs_context,
.parameters = ffs_fs_fs_parameters,
- .kill_sb = ffs_fs_kill_sb,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = ffs_fs_free_sb,
};
MODULE_ALIAS_FS("functionfs");

diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
index a203266bc0dc82..e79e907b0a065e 100644
--- a/drivers/usb/gadget/legacy/inode.c
+++ b/drivers/usb/gadget/legacy/inode.c
@@ -2086,9 +2086,8 @@ static int gadgetfs_init_fs_context(struct fs_context *fc)
}

static void
-gadgetfs_kill_sb (struct super_block *sb)
+gadgetfs_free_sb(struct super_block *sb)
{
- kill_litter_super (sb);
if (the_device) {
put_dev (the_device);
the_device = NULL;
@@ -2100,10 +2099,11 @@ gadgetfs_kill_sb (struct super_block *sb)
/*----------------------------------------------------------------------*/

static struct file_system_type gadgetfs_type = {
- .owner = THIS_MODULE,
- .name = shortname,
- .init_fs_context = gadgetfs_init_fs_context,
- .kill_sb = gadgetfs_kill_sb,
+ .owner = THIS_MODULE,
+ .name = shortname,
+ .init_fs_context = gadgetfs_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = gadgetfs_free_sb,
};
MODULE_ALIAS_FS("gadgetfs");

diff --git a/drivers/xen/xenfs/super.c b/drivers/xen/xenfs/super.c
index d7d64235010d41..ab2e3d3d05bb2e 100644
--- a/drivers/xen/xenfs/super.c
+++ b/drivers/xen/xenfs/super.c
@@ -85,10 +85,10 @@ static int xenfs_init_fs_context(struct fs_context *fc)
}

static struct file_system_type xenfs_type = {
- .owner = THIS_MODULE,
- .name = "xenfs",
- .init_fs_context = xenfs_init_fs_context,
- .kill_sb = kill_litter_super,
+ .owner = THIS_MODULE,
+ .name = "xenfs",
+ .init_fs_context = xenfs_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("xenfs");

diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index e0108d17b085cf..0eb5bd91cfeafb 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -809,10 +809,10 @@ static struct linux_binfmt misc_format = {
};

static struct file_system_type bm_fs_type = {
- .owner = THIS_MODULE,
- .name = "binfmt_misc",
- .init_fs_context = bm_init_fs_context,
- .kill_sb = kill_litter_super,
+ .owner = THIS_MODULE,
+ .name = "binfmt_misc",
+ .init_fs_context = bm_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("binfmt_misc");

diff --git a/fs/configfs/mount.c b/fs/configfs/mount.c
index c2d820063ec49a..87043caf048a2c 100644
--- a/fs/configfs/mount.c
+++ b/fs/configfs/mount.c
@@ -112,10 +112,10 @@ static int configfs_init_fs_context(struct fs_context *fc)
}

static struct file_system_type configfs_fs_type = {
- .owner = THIS_MODULE,
- .name = "configfs",
- .init_fs_context = configfs_init_fs_context,
- .kill_sb = kill_litter_super,
+ .owner = THIS_MODULE,
+ .name = "configfs",
+ .init_fs_context = configfs_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("configfs");

diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index 83e57e9f9fa037..a4955c8f6638ae 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -300,10 +300,10 @@ static struct dentry *debug_mount(struct file_system_type *fs_type,
}

static struct file_system_type debug_fs_type = {
- .owner = THIS_MODULE,
- .name = "debugfs",
- .mount = debug_mount,
- .kill_sb = kill_litter_super,
+ .owner = THIS_MODULE,
+ .name = "debugfs",
+ .mount = debug_mount,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("debugfs");

diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
index d46cea36c026ad..bc7ff574dbbf90 100644
--- a/fs/devpts/inode.c
+++ b/fs/devpts/inode.c
@@ -487,11 +487,10 @@ static struct dentry *devpts_mount(struct file_system_type *fs_type,
return mount_nodev(fs_type, flags, data, devpts_fill_super);
}

-static void devpts_kill_sb(struct super_block *sb)
+static void devpts_free_sb(struct super_block *sb)
{
struct pts_fs_info *fsi = DEVPTS_SB(sb);

- kill_litter_super(sb);
if (fsi)
ida_destroy(&fsi->allocated_ptys);
kfree(fsi);
@@ -500,7 +499,8 @@ static void devpts_kill_sb(struct super_block *sb)
static struct file_system_type devpts_fs_type = {
.name = "devpts",
.mount = devpts_mount,
- .kill_sb = devpts_kill_sb,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = devpts_free_sb,
.fs_flags = FS_USERNS_MOUNT,
};

diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
index e028fafa04f38c..f9e8df15c35067 100644
--- a/fs/efivarfs/super.c
+++ b/fs/efivarfs/super.c
@@ -279,10 +279,8 @@ static int efivarfs_init_fs_context(struct fs_context *fc)
return 0;
}

-static void efivarfs_kill_sb(struct super_block *sb)
+static void efivarfs_free_sb(struct super_block *sb)
{
- kill_litter_super(sb);
-
if (!efivar_is_available())
return;

@@ -291,10 +289,11 @@ static void efivarfs_kill_sb(struct super_block *sb)
}

static struct file_system_type efivarfs_type = {
- .owner = THIS_MODULE,
- .name = "efivarfs",
- .init_fs_context = efivarfs_init_fs_context,
- .kill_sb = efivarfs_kill_sb,
+ .owner = THIS_MODULE,
+ .name = "efivarfs",
+ .init_fs_context = efivarfs_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = efivarfs_free_sb,
};

static __init int efivarfs_init(void)
diff --git a/fs/fuse/control.c b/fs/fuse/control.c
index ab62e46242568a..3a24d00a165971 100644
--- a/fs/fuse/control.c
+++ b/fs/fuse/control.c
@@ -352,7 +352,7 @@ static int fuse_ctl_init_fs_context(struct fs_context *fsc)
return 0;
}

-static void fuse_ctl_kill_sb(struct super_block *sb)
+static void fuse_ctl_shutdown_sb(struct super_block *sb)
{
struct fuse_conn *fc;

@@ -362,14 +362,14 @@ static void fuse_ctl_kill_sb(struct super_block *sb)
fc->ctl_ndents = 0;
mutex_unlock(&fuse_mutex);

- kill_litter_super(sb);
+ litter_shutdown_sb(sb);
}

static struct file_system_type fuse_ctl_fs_type = {
- .owner = THIS_MODULE,
- .name = "fusectl",
- .init_fs_context = fuse_ctl_init_fs_context,
- .kill_sb = fuse_ctl_kill_sb,
+ .owner = THIS_MODULE,
+ .name = "fusectl",
+ .init_fs_context = fuse_ctl_init_fs_context,
+ .shutdown_sb = fuse_ctl_shutdown_sb,
};
MODULE_ALIAS_FS("fusectl");

diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index 316c4cebd3f3de..1a722aba8c6645 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -1588,7 +1588,7 @@ static struct file_system_type hugetlbfs_fs_type = {
.name = "hugetlbfs",
.init_fs_context = hugetlbfs_init_fs_context,
.parameters = hugetlb_fs_parameters,
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
};

static struct vfsmount *hugetlbfs_vfsmount[HUGE_MAX_HSTATE];
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index 7ed02fb88a362c..a2be86da4efa15 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -1440,21 +1440,23 @@ static int nfsd_init_fs_context(struct fs_context *fc)
return 0;
}

-static void nfsd_umount(struct super_block *sb)
+static void nfsd_shutdown_sb(struct super_block *sb)
{
- struct net *net = sb->s_fs_info;
-
- nfsd_shutdown_threads(net);
+ nfsd_shutdown_threads(sb->s_fs_info);
+ litter_shutdown_sb(sb);
+}

- kill_litter_super(sb);
- put_net(net);
+static void nfsd_free_sb(struct super_block *sb)
+{
+ put_net(sb->s_fs_info);
}

static struct file_system_type nfsd_fs_type = {
- .owner = THIS_MODULE,
- .name = "nfsd",
- .init_fs_context = nfsd_init_fs_context,
- .kill_sb = nfsd_umount,
+ .owner = THIS_MODULE,
+ .name = "nfsd",
+ .init_fs_context = nfsd_init_fs_context,
+ .shutdown_sb = nfsd_shutdown_sb,
+ .free_sb = nfsd_free_sb,
};
MODULE_ALIAS_FS("nfsd");

diff --git a/fs/ocfs2/dlmfs/dlmfs.c b/fs/ocfs2/dlmfs/dlmfs.c
index 81265123ce6ce5..b987653f6ec070 100644
--- a/fs/ocfs2/dlmfs/dlmfs.c
+++ b/fs/ocfs2/dlmfs/dlmfs.c
@@ -567,7 +567,7 @@ static struct file_system_type dlmfs_fs_type = {
.owner = THIS_MODULE,
.name = "ocfs2_dlmfs",
.mount = dlmfs_mount,
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("ocfs2_dlmfs");

diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c
index fd1d24b47160d0..36635ed77b6873 100644
--- a/fs/pstore/inode.c
+++ b/fs/pstore/inode.c
@@ -465,10 +465,8 @@ static struct dentry *pstore_mount(struct file_system_type *fs_type,
return mount_single(fs_type, flags, data, pstore_fill_super);
}

-static void pstore_kill_sb(struct super_block *sb)
+static void pstore_free_sb(struct super_block *sb)
{
- kill_litter_super(sb);
-
mutex_lock(&pstore_sb_lock);
pstore_sb = NULL;

@@ -483,7 +481,8 @@ static struct file_system_type pstore_fs_type = {
.owner = THIS_MODULE,
.name = "pstore",
.mount = pstore_mount,
- .kill_sb = pstore_kill_sb,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = pstore_free_sb,
};

int __init pstore_init_fs(void)
diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c
index 0f37ecbae59dad..51eade68ae06f8 100644
--- a/fs/ramfs/inode.c
+++ b/fs/ramfs/inode.c
@@ -278,9 +278,8 @@ int ramfs_init_fs_context(struct fs_context *fc)
return 0;
}

-void ramfs_kill_sb(struct super_block *sb)
+void ramfs_free_sb(struct super_block *sb)
{
- kill_litter_super(sb);
kfree(sb->s_fs_info);
}

@@ -288,7 +287,8 @@ static struct file_system_type ramfs_fs_type = {
.name = "ramfs",
.init_fs_context = ramfs_init_fs_context,
.parameters = ramfs_fs_parameters,
- .kill_sb = ramfs_kill_sb,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = ramfs_free_sb,
.fs_flags = FS_USERNS_MOUNT,
};

diff --git a/fs/super.c b/fs/super.c
index 8e173eccc8c113..1173a272bd086a 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -1319,13 +1319,21 @@ void free_anon_bdev(dev_t dev)
}
EXPORT_SYMBOL(free_anon_bdev);

-void kill_litter_super(struct super_block *sb)
+/**
+ * litter_shutdown_sb - shut down a super_block that only has synthetic files
+ * @sb: super_block to shut down
+ *
+ * This function is a drop in ->shutdown_sb method and calls d_genocide() to
+ * drop all entries in the dcache. It is used for file systems that only
+ * contained synthetic, that is kernel-generated, entries created by helpers
+ * like simple_fill_super().
+ */
+void litter_shutdown_sb(struct super_block *sb)
{
if (sb->s_root)
d_genocide(sb->s_root);
- generic_shutdown_super(sb);
}
-EXPORT_SYMBOL(kill_litter_super);
+EXPORT_SYMBOL(litter_shutdown_sb);

static int test_keyed_super(struct super_block *sb, struct fs_context *fc)
{
diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
index de5b72216b1a70..7cde49dd76c5f7 100644
--- a/fs/tracefs/inode.c
+++ b/fs/tracefs/inode.c
@@ -438,7 +438,7 @@ static struct file_system_type trace_fs_type = {
.owner = THIS_MODULE,
.name = "tracefs",
.mount = trace_mount,
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
};
MODULE_ALIAS_FS("tracefs");

diff --git a/include/linux/fs.h b/include/linux/fs.h
index 12fff7df3cc46b..c44c6fe9fc045b 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2384,7 +2384,7 @@ extern struct dentry *mount_subtree(struct vfsmount *mnt, const char *path);
void retire_super(struct super_block *sb);
void generic_shutdown_super(struct super_block *sb);
void kill_block_super(struct super_block *sb);
-void kill_litter_super(struct super_block *sb);
+void litter_shutdown_sb(struct super_block *sb);
void deactivate_super(struct super_block *sb);
void deactivate_locked_super(struct super_block *sb);
int get_anon_bdev(dev_t *);
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h
index d506dc63dd47c5..9065f3bc8c9e94 100644
--- a/include/linux/ramfs.h
+++ b/include/linux/ramfs.h
@@ -7,7 +7,7 @@
struct inode *ramfs_get_inode(struct super_block *sb, const struct inode *dir,
umode_t mode, dev_t dev);
extern int ramfs_init_fs_context(struct fs_context *fc);
-extern void ramfs_kill_sb(struct super_block *sb);
+void ramfs_free_sb(struct super_block *sb);

#ifdef CONFIG_MMU
static inline int
diff --git a/init/do_mounts.c b/init/do_mounts.c
index 5dfd30b13f4857..95f40b8784d9aa 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -503,9 +503,9 @@ static int rootfs_init_fs_context(struct fs_context *fc)
}

struct file_system_type rootfs_fs_type = {
- .name = "rootfs",
- .init_fs_context = rootfs_init_fs_context,
- .kill_sb = kill_litter_super,
+ .name = "rootfs",
+ .init_fs_context = rootfs_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
};

void __init init_rootfs(void)
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index ba8215ed663a43..e2e2fa6ffb901c 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -1681,7 +1681,7 @@ static const struct fs_context_operations mqueue_fs_context_ops = {
static struct file_system_type mqueue_fs_type = {
.name = "mqueue",
.init_fs_context = mqueue_init_fs_context,
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
.fs_flags = FS_USERNS_MOUNT,
};

diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 99d0625b6c828f..877a2a6a5729ba 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -797,7 +797,7 @@ static struct file_system_type bpf_fs_type = {
.name = "bpf",
.init_fs_context = bpf_init_fs_context,
.parameters = bpf_fs_parameters,
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
};

static int __init bpf_init(void)
diff --git a/mm/shmem.c b/mm/shmem.c
index 02e62fccc80d49..53a39134e863f3 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -4584,7 +4584,7 @@ static struct file_system_type shmem_fs_type = {
#ifdef CONFIG_TMPFS
.parameters = shmem_fs_parameters,
#endif
- .kill_sb = kill_litter_super,
+ .shutdown_sb = litter_shutdown_sb,
#ifdef CONFIG_SHMEM
.fs_flags = FS_USERNS_MOUNT | FS_ALLOW_IDMAP | FS_MGTIME,
#else
@@ -4709,7 +4709,8 @@ static struct file_system_type shmem_fs_type = {
.name = "tmpfs",
.init_fs_context = ramfs_init_fs_context,
.parameters = ramfs_fs_parameters,
- .kill_sb = ramfs_kill_sb,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = ramfs_free_sb,
.fs_flags = FS_USERNS_MOUNT,
};

diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index f420d845734513..c285cbe1a821a8 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -1441,7 +1441,7 @@ static int rpc_init_fs_context(struct fs_context *fc)
return 0;
}

-static void rpc_kill_sb(struct super_block *sb)
+static void rpc_shutdown_sb(struct super_block *sb)
{
struct net *net = sb->s_fs_info;
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
@@ -1459,15 +1459,20 @@ static void rpc_kill_sb(struct super_block *sb)
sb);
mutex_unlock(&sn->pipefs_sb_lock);
out:
- kill_litter_super(sb);
- put_net(net);
+ litter_shutdown_sb(sb);
+}
+
+static void rpc_free_sb(struct super_block *sb)
+{
+ put_net(sb->s_fs_info);
}

static struct file_system_type rpc_pipe_fs_type = {
- .owner = THIS_MODULE,
- .name = "rpc_pipefs",
- .init_fs_context = rpc_init_fs_context,
- .kill_sb = rpc_kill_sb,
+ .owner = THIS_MODULE,
+ .name = "rpc_pipefs",
+ .init_fs_context = rpc_init_fs_context,
+ .shutdown_sb = rpc_shutdown_sb,
+ .free_sb = rpc_free_sb,
};
MODULE_ALIAS_FS("rpc_pipefs");
MODULE_ALIAS("rpc_pipefs");
diff --git a/security/inode.c b/security/inode.c
index 3aa75fffa8c929..84779f998e76c5 100644
--- a/security/inode.c
+++ b/security/inode.c
@@ -67,10 +67,10 @@ static int securityfs_init_fs_context(struct fs_context *fc)
}

static struct file_system_type fs_type = {
- .owner = THIS_MODULE,
- .name = "securityfs",
- .init_fs_context = securityfs_init_fs_context,
- .kill_sb = kill_litter_super,
+ .owner = THIS_MODULE,
+ .name = "securityfs",
+ .init_fs_context = securityfs_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
};

/**
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index 08fbb0f89d2659..e619eedefca373 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -94,7 +94,7 @@ static int selinux_fs_info_create(struct super_block *sb)
return 0;
}

-static void selinux_fs_info_free(struct super_block *sb)
+static void sel_free_sb(struct super_block *sb)
{
struct selinux_fs_info *fsi = sb->s_fs_info;
unsigned int i;
@@ -2120,16 +2120,11 @@ static int sel_init_fs_context(struct fs_context *fc)
return 0;
}

-static void sel_kill_sb(struct super_block *sb)
-{
- kill_litter_super(sb);
- selinux_fs_info_free(sb);
-}
-
static struct file_system_type sel_fs_type = {
- .name = "selinuxfs",
- .init_fs_context = sel_init_fs_context,
- .kill_sb = sel_kill_sb,
+ .name = "selinuxfs",
+ .init_fs_context = sel_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
+ .free_sb = sel_free_sb,
};

static struct vfsmount *selinuxfs_mount __ro_after_init;
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
index e22aad7604e8ac..9e60e927d02deb 100644
--- a/security/smack/smackfs.c
+++ b/security/smack/smackfs.c
@@ -2979,9 +2979,9 @@ static int smk_init_fs_context(struct fs_context *fc)
}

static struct file_system_type smk_fs_type = {
- .name = "smackfs",
- .init_fs_context = smk_init_fs_context,
- .kill_sb = kill_litter_super,
+ .name = "smackfs",
+ .init_fs_context = smk_init_fs_context,
+ .shutdown_sb = litter_shutdown_sb,
};

static struct vfsmount *smackfs_mount;
--
2.39.2