ntfs3: free the sbi in ->kill_sb
authorChristoph Hellwig <hch@lst.de>
Wed, 9 Aug 2023 22:05:45 +0000 (15:05 -0700)
committerChristian Brauner <brauner@kernel.org>
Thu, 10 Aug 2023 08:34:56 +0000 (10:34 +0200)
As a rule of thumb everything allocated to the fs_context and moved into
the super_block should be freed by ->kill_sb so that the teardown
handling doesn't need to be duplicated between the fill_super error
path and put_super.  Implement an ntfs3-specific kill_sb method to do
that.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Message-Id: <20230809220545.1308228-14-hch@lst.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/ntfs3/super.c

index 7271389..5fffdde 100644 (file)
@@ -625,10 +625,6 @@ static void ntfs_put_super(struct super_block *sb)
 
        /* Mark rw ntfs as clear, if possible. */
        ntfs_set_state(sbi, NTFS_DIRTY_CLEAR);
-
-       put_mount_options(sbi->options);
-       ntfs3_free_sbi(sbi);
-       sb->s_fs_info = NULL;
 }
 
 static int ntfs_statfs(struct dentry *dentry, struct kstatfs *buf)
@@ -1562,15 +1558,7 @@ load_root:
 put_inode_out:
        iput(inode);
 out:
-       /*
-        * Free resources here.
-        * ntfs_fs_free will be called with fc->s_fs_info = NULL
-        */
-       put_mount_options(sbi->options);
-       ntfs3_free_sbi(sbi);
-       sb->s_fs_info = NULL;
        kfree(boot2);
-
        return err;
 }
 
@@ -1726,13 +1714,24 @@ free_opts:
        return -ENOMEM;
 }
 
+static void ntfs3_kill_sb(struct super_block *sb)
+{
+       struct ntfs_sb_info *sbi = sb->s_fs_info;
+
+       kill_block_super(sb);
+
+       if (sbi->options)
+               put_mount_options(sbi->options);
+       ntfs3_free_sbi(sbi);
+}
+
 // clang-format off
 static struct file_system_type ntfs_fs_type = {
        .owner                  = THIS_MODULE,
        .name                   = "ntfs3",
        .init_fs_context        = ntfs_init_fs_context,
        .parameters             = ntfs_fs_parameters,
-       .kill_sb                = kill_block_super,
+       .kill_sb                = ntfs3_kill_sb,
        .fs_flags               = FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
 };
 // clang-format on