From: "Darrick J. Wong" <djwong-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org>
Cc: Al Viro <viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org>,
Christian Brauner
<brauner-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Jan Kara <jack-AlSwsSmVLrQ@public.gmane.org>,
Chris Mason <clm-b10kYP2dOMg@public.gmane.org>,
Josef Bacik <josef-DigfWCa+lFGyeJad7bwFQA@public.gmane.org>,
David Sterba <dsterba-IBi9RG/b67k@public.gmane.org>,
Theodore Ts'o <tytso-3s7WtUTddSA@public.gmane.org>,
Andreas Dilger
<adilger.kernel-m1MBpc4rdrD3fQ9qLvQP4Q@public.gmane.org>,
Jaegeuk Kim <jaegeuk-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Chao Yu <chao-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Ryusuke Konishi
<konishi.ryusuke-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Jens Axboe <axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>,
linux-btrfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-ext4-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-f2fs-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-xfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-block-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 11/12] xfs: drop s_umount over opening the log and RT devices
Date: Wed, 2 Aug 2023 09:32:19 -0700 [thread overview]
Message-ID: <20230802163219.GW11352@frogsfrogsfrogs> (raw)
In-Reply-To: <20230802154131.2221419-12-hch-jcswGhMUV9g@public.gmane.org>
On Wed, Aug 02, 2023 at 05:41:30PM +0200, Christoph Hellwig wrote:
> 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-jcswGhMUV9g@public.gmane.org>
> ---
> fs/xfs/xfs_super.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index 8185102431301d..d5042419ed9997 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -448,17 +448,21 @@ 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;
>
> + /* see get_tree_bdev why this is needed and safe */
Which part of get_tree_bdev? Is it this?
/*
* s_umount nests inside open_mutex during
* __invalidate_device(). blkdev_put() acquires
* open_mutex and can't be called under s_umount. Drop
* s_umount temporarily. This is safe as we're
* holding an active reference.
*/
up_write(&s->s_umount);
blkdev_put(bdev, fc->fs_type);
down_write(&s->s_umount);
<confused>
> + 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_unlock;
> }
>
> if (mp->m_rtname) {
> @@ -496,7 +500,10 @@ xfs_open_devices(
> mp->m_logdev_targp = mp->m_ddev_targp;
> }
>
> - return 0;
> + error = 0;
> +out_unlock:
> + down_write(&sb->s_umount);
Isn't down_write taking s_umount? I think the label should be
out_relock or something less misleading.
--D
> + return error;
>
> out_free_rtdev_targ:
> if (mp->m_rtdev_targp)
> @@ -508,7 +515,7 @@ xfs_open_devices(
> out_close_logdev:
> if (logdev && logdev != ddev)
> xfs_blkdev_put(mp, logdev);
> - return error;
> + goto out_unlock;
> }
>
> /*
> --
> 2.39.2
>
next prev parent reply other threads:[~2023-08-02 16:32 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-02 15:41 more blkdev_get and holder work Christoph Hellwig
[not found] ` <20230802154131.2221419-1-hch-jcswGhMUV9g@public.gmane.org>
2023-08-02 15:41 ` [PATCH 01/12] fs: export setup_bdev_super Christoph Hellwig
2023-08-03 18:04 ` Christian Brauner
2023-09-04 18:11 ` [f2fs-dev] " patchwork-bot+f2fs
2023-08-02 15:41 ` [PATCH 02/12] nilfs2: use setup_bdev_super to de-duplicate the mount code Christoph Hellwig
[not found] ` <20230802154131.2221419-3-hch-jcswGhMUV9g@public.gmane.org>
2023-08-03 11:46 ` Jan Kara
2023-08-04 2:01 ` Ryusuke Konishi
2023-08-10 11:05 ` Jan Kara
2023-08-10 16:39 ` Ryusuke Konishi
[not found] ` <CAKFNMon_3A7dC+k1q_RjEnoXXNtxBJAUQud_FD4s4VrHZdCVzg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-08-10 18:14 ` Jan Kara
2023-08-04 5:04 ` Ryusuke Konishi
2023-08-02 15:41 ` [PATCH 03/12] btrfs: always open the device read-only in btrfs_scan_one_device Christoph Hellwig
2023-08-02 15:41 ` [PATCH 04/12] btrfs: open block devices after superblock creation Christoph Hellwig
2023-08-02 15:41 ` [PATCH 05/12] ext4: make the IS_EXT2_SB/IS_EXT3_SB checks more robust Christoph Hellwig
[not found] ` <20230802154131.2221419-6-hch-jcswGhMUV9g@public.gmane.org>
2023-08-03 11:21 ` Jan Kara
2023-08-03 18:10 ` Christian Brauner
2023-08-04 20:34 ` Theodore Ts'o
2023-08-02 15:41 ` [PATCH 06/12] fs: use the super_block as holder when mounting file systems Christoph Hellwig
[not found] ` <20230802154131.2221419-7-hch-jcswGhMUV9g@public.gmane.org>
2023-08-03 11:51 ` Jan Kara
2023-08-03 13:33 ` Jan Kara
2023-08-05 8:36 ` Christoph Hellwig
2023-08-03 18:11 ` Christian Brauner
2023-08-02 15:41 ` [PATCH 07/12] fs: stop using get_super in fs_mark_dead Christoph Hellwig
2023-08-03 13:12 ` Jan Kara
2023-08-03 18:15 ` Christian Brauner
2023-08-02 15:41 ` [PATCH 08/12] fs: export fs_holder_ops Christoph Hellwig
2023-08-03 13:16 ` Jan Kara
2023-08-03 18:15 ` Christian Brauner
2023-08-02 15:41 ` [PATCH 09/12] ext4: drop s_umount over opening the log device Christoph Hellwig
2023-08-03 13:25 ` Jan Kara
[not found] ` <20230802154131.2221419-10-hch-jcswGhMUV9g@public.gmane.org>
2023-08-03 18:16 ` Christian Brauner
2023-08-04 20:34 ` Theodore Ts'o
2023-08-02 15:41 ` [PATCH 10/12] ext4: use fs_holder_ops for " Christoph Hellwig
2023-08-03 13:26 ` Jan Kara
2023-08-02 15:41 ` [PATCH 11/12] xfs: drop s_umount over opening the log and RT devices Christoph Hellwig
[not found] ` <20230802154131.2221419-12-hch-jcswGhMUV9g@public.gmane.org>
2023-08-02 16:32 ` Darrick J. Wong [this message]
2023-08-05 8:32 ` Christoph Hellwig
2023-08-05 10:39 ` Christian Brauner
2023-08-05 16:19 ` Darrick J. Wong
2023-08-05 17:13 ` Christian Brauner
2023-08-02 15:41 ` [PATCH 12/12] xfs use fs_holder_ops for " Christoph Hellwig
2023-08-02 16:33 ` Darrick J. Wong
2023-08-14 10:58 ` Carlos Maiolino
2023-08-14 11:05 ` Carlos Maiolino
2023-08-04 15:39 ` more blkdev_get and holder work Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230802163219.GW11352@frogsfrogsfrogs \
--to=djwong-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=adilger.kernel-m1MBpc4rdrD3fQ9qLvQP4Q@public.gmane.org \
--cc=axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org \
--cc=brauner-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=chao-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=clm-b10kYP2dOMg@public.gmane.org \
--cc=dsterba-IBi9RG/b67k@public.gmane.org \
--cc=hch-jcswGhMUV9g@public.gmane.org \
--cc=jack-AlSwsSmVLrQ@public.gmane.org \
--cc=jaegeuk-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=josef-DigfWCa+lFGyeJad7bwFQA@public.gmane.org \
--cc=konishi.ryusuke-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-block-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-btrfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-ext4-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-f2fs-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-xfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=tytso-3s7WtUTddSA@public.gmane.org \
--cc=viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).