Unverified Commit 653bee38 authored by Christian Brauner's avatar Christian Brauner
Browse files

xfs: simplify device handling

We removed all codepaths where s_umount is taken beneath open_mutex and
bd_holder_lock so don't make things more complicated than they need to
be and hold s_umount over block device opening.

Link: https://lore.kernel.org/r/20231024-vfs-super-rework-v1-2-37a8aa697148@kernel.org


Reviewed-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 761c47a9
Loading
Loading
Loading
Loading
+3 −16
Original line number Diff line number Diff line
@@ -438,19 +438,13 @@ xfs_open_devices(
	struct bdev_handle	*logdev_handle = NULL, *rtdev_handle = NULL;
	int			error;

	/*
	 * blkdev_put() can't be called under s_umount, see the comment
	 * in get_tree_bdev() for more details
	 */
	up_write(&sb->s_umount);

	/*
	 * Open real time and log devices - order is important.
	 */
	if (mp->m_logname) {
		error = xfs_blkdev_get(mp, mp->m_logname, &logdev_handle);
		if (error)
			goto out_relock;
			return error;
	}

	if (mp->m_rtname) {
@@ -493,10 +487,7 @@ xfs_open_devices(
			bdev_release(logdev_handle);
	}

	error = 0;
out_relock:
	down_write(&sb->s_umount);
	return error;
	return 0;

 out_free_rtdev_targ:
	if (mp->m_rtdev_targp)
@@ -509,7 +500,7 @@ xfs_open_devices(
 out_close_logdev:
	if (logdev_handle)
		bdev_release(logdev_handle);
	goto out_relock;
	return error;
}

/*
@@ -759,10 +750,6 @@ static void
xfs_mount_free(
	struct xfs_mount	*mp)
{
	/*
	 * Free the buftargs here because blkdev_put needs to be called outside
	 * of sb->s_umount, which is held around the call to ->put_super.
	 */
	if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp)
		xfs_free_buftarg(mp->m_logdev_targp);
	if (mp->m_rtdev_targp)