Skip to content

Commit

Permalink
xfs: drop s_umount over opening the log and RT devices
Browse files Browse the repository at this point in the history
Just like get_tree_bdev needs to drop s_umount when opening the main
device, we need to do the same for the xfs log and RT devices to avoid a
potential lock order reversal with s_unmount for the mark_dead path.

It might be preferable to just drop s_umount over ->fill_super entirely,
but that will require a fairly massive audit first, so we'll do the easy
version here first.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Message-Id: <20230802154131.2221419-12-hch@lst.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
  • Loading branch information
Christoph Hellwig authored and Christian Brauner committed Aug 11, 2023
1 parent 8bed178 commit 8d945b5
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions fs/xfs/xfs_super.c
Original file line number Diff line number Diff line change
Expand Up @@ -462,17 +462,24 @@ STATIC int
xfs_open_devices(
struct xfs_mount *mp)
{
struct block_device *ddev = mp->m_super->s_bdev;
struct super_block *sb = mp->m_super;
struct block_device *ddev = sb->s_bdev;
struct block_device *logdev = NULL, *rtdev = 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);
if (error)
return error;
goto out_relock;
}

if (mp->m_rtname) {
Expand Down Expand Up @@ -510,7 +517,10 @@ xfs_open_devices(
mp->m_logdev_targp = mp->m_ddev_targp;
}

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

out_free_rtdev_targ:
if (mp->m_rtdev_targp)
Expand All @@ -523,7 +533,7 @@ xfs_open_devices(
out_close_logdev:
if (logdev && logdev != ddev)
blkdev_put(logdev, mp);
return error;
goto out_relock;
}

/*
Expand Down

0 comments on commit 8d945b5

Please sign in to comment.