Commit 2a9311ad authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Christian Brauner
Browse files

xfs: free the xfs_mount in ->kill_sb



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 a XFS-specific kill_sb method to do that.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarChristian Brauner <brauner@kernel.org>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
Message-Id: <20230809220545.1308228-4-hch@lst.de>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 1aa2d074
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -1144,9 +1144,6 @@ xfs_fs_put_super(
	xfs_destroy_percpu_counters(mp);
	xfs_destroy_mount_workqueues(mp);
	xfs_close_devices(mp);

	sb->s_fs_info = NULL;
	xfs_mount_free(mp);
}

static long
@@ -1488,7 +1485,7 @@ xfs_fs_fill_super(

	error = xfs_fs_validate_params(mp);
	if (error)
		goto out_free_names;
		return error;

	sb_min_blocksize(sb, BBSIZE);
	sb->s_xattr = xfs_xattr_handlers;
@@ -1515,7 +1512,7 @@ xfs_fs_fill_super(

	error = xfs_open_devices(mp);
	if (error)
		goto out_free_names;
		return error;

	error = xfs_init_mount_workqueues(mp);
	if (error)
@@ -1735,9 +1732,6 @@ xfs_fs_fill_super(
	xfs_destroy_mount_workqueues(mp);
 out_close_devices:
	xfs_close_devices(mp);
 out_free_names:
	sb->s_fs_info = NULL;
	xfs_mount_free(mp);
	return error;

 out_unmount:
@@ -2000,12 +1994,20 @@ static int xfs_init_fs_context(
	return 0;
}

static void
xfs_kill_sb(
	struct super_block		*sb)
{
	kill_block_super(sb);
	xfs_mount_free(XFS_M(sb));
}

static struct file_system_type xfs_fs_type = {
	.owner			= THIS_MODULE,
	.name			= "xfs",
	.init_fs_context	= xfs_init_fs_context,
	.parameters		= xfs_fs_parameters,
	.kill_sb		= kill_block_super,
	.kill_sb		= xfs_kill_sb,
	.fs_flags		= FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
};
MODULE_ALIAS_FS("xfs");