From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>,
Namjae Jeon <linkinjeon@kernel.org>,
Sungjong Seo <sj1557.seo@samsung.com>,
Theodore Ts'o <tytso@mit.edu>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Konstantin Komarov <almaz.alexandrovich@paragon-software.com>,
linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,
ntfs3@lists.linux.dev, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 07/13] xfs: document the invalidate_bdev call in invalidate_bdev
Date: Wed, 9 Aug 2023 15:39:23 -0700 [thread overview]
Message-ID: <20230809223923.GX11352@frogsfrogsfrogs> (raw)
In-Reply-To: <20230809220545.1308228-8-hch@lst.de>
On Wed, Aug 09, 2023 at 03:05:39PM -0700, Christoph Hellwig wrote:
> Copy and paste the commit message from Darrick into a comment to explain
> the seemly odd invalidate_bdev in xfs_shutdown_devices.
^ seemingly?
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/xfs_super.c | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index 4ae3b01ed038c7..c169beb0d8cab3 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -399,6 +399,32 @@ STATIC void
> xfs_shutdown_devices(
> struct xfs_mount *mp)
> {
> + /*
> + * Udev is triggered whenever anyone closes a block device or unmounts
> + * a file systemm on a block device.
> + * The default udev rules invoke blkid to read the fs super and create
> + * symlinks to the bdev under /dev/disk. For this, it uses buffered
> + * reads through the page cache.
> + *
> + * xfs_db also uses buffered reads to examine metadata. There is no
> + * coordination between xfs_db and udev, which means that they can run
> + * concurrently. Note there is no coordination between the kernel and
> + * blkid either.
> + *
> + * On a system with 64k pages, the page cache can cache the superblock
> + * and the root inode (and hence the root directory) with the same 64k
> + * page. If udev spawns blkid after the mkfs and the system is busy
> + * enough that it is still running when xfs_db starts up, they'll both
> + * read from the same page in the pagecache.
> + *
> + * The unmount writes updated inode metadata to disk directly. The XFS
> + * buffer cache does not use the bdev pagecache, nor does it invalidate
> + * the pagecache on umount. If the above scenario occurs, the pagecache
This sentence reads a little strangely, since "nor does it invalidate"
would seem to conflict with the invalidate_bdev call below. I suggest
changing the verb a bit:
"The XFS buffer cache does not use the bdev pagecache, so it needs to
invalidate that pagecache on unmount."
With those two things changed,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> + * no longer reflects what's on disk, xfs_db reads the stale metadata,
> + * and fails to find /a. Most of the time this succeeds because closing
> + * a bdev invalidates the page cache, but when processes race, everyone
> + * loses.
> + */
> if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) {
> blkdev_issue_flush(mp->m_logdev_targp->bt_bdev);
> invalidate_bdev(mp->m_logdev_targp->bt_bdev);
> --
> 2.39.2
>
next prev parent reply other threads:[~2023-08-09 22:39 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-09 22:05 s_fs_info and ->kill_sb revisited v2 Christoph Hellwig
2023-08-09 22:05 ` [PATCH 01/13] xfs: reformat the xfs_fs_free prototype Christoph Hellwig
2023-08-10 8:53 ` Christian Brauner
2023-08-10 15:51 ` Christoph Hellwig
2023-08-11 7:24 ` Christian Brauner
2023-08-09 22:05 ` [PATCH 02/13] xfs: remove a superfluous s_fs_info NULL check in xfs_fs_put_super Christoph Hellwig
2023-08-09 22:05 ` [PATCH 03/13] xfs: free the xfs_mount in ->kill_sb Christoph Hellwig
2023-08-09 22:05 ` [PATCH 04/13] xfs: remove xfs_blkdev_put Christoph Hellwig
2023-08-09 22:05 ` [PATCH 05/13] xfs: close the RT and log block devices in xfs_free_buftarg Christoph Hellwig
2023-08-09 22:05 ` [PATCH 06/13] xfs: close the external block devices in xfs_mount_free Christoph Hellwig
2023-08-09 22:34 ` Darrick J. Wong
2023-08-09 22:05 ` [PATCH 07/13] xfs: document the invalidate_bdev call in invalidate_bdev Christoph Hellwig
2023-08-09 22:39 ` Darrick J. Wong [this message]
2023-08-10 8:20 ` Christian Brauner
2023-08-10 15:53 ` Christoph Hellwig
2023-08-10 15:22 ` Matthew Wilcox
2023-08-10 15:52 ` Christoph Hellwig
2023-08-10 16:00 ` Darrick J. Wong
2023-08-10 15:57 ` Darrick J. Wong
2023-08-09 22:05 ` [PATCH 08/13] ext4: close the external journal device in ->kill_sb Christoph Hellwig
2023-08-09 22:05 ` [PATCH 09/13] exfat: don't RCU-free the sbi Christoph Hellwig
2023-08-10 13:01 ` Namjae Jeon
2023-08-09 22:05 ` [PATCH 10/13] exfat: free the sbi and iocharset in ->kill_sb Christoph Hellwig
2023-08-10 13:02 ` Namjae Jeon
2023-08-09 22:05 ` [PATCH 11/13] ntfs3: rename put_ntfs ntfs3_free_sbi Christoph Hellwig
2023-08-09 22:05 ` [PATCH 12/13] ntfs3: don't call sync_blockdev in ntfs_put_super Christoph Hellwig
2023-08-09 22:05 ` [PATCH 13/13] ntfs3: free the sbi in ->kill_sb Christoph Hellwig
2023-09-07 13:05 ` Guenter Roeck
2023-09-07 13:54 ` Christian Brauner
2023-09-07 15:23 ` Guenter Roeck
2023-09-07 15:49 ` 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=20230809223923.GX11352@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=adilger.kernel@dilger.ca \
--cc=almaz.alexandrovich@paragon-software.com \
--cc=brauner@kernel.org \
--cc=hch@lst.de \
--cc=linkinjeon@kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=ntfs3@lists.linux.dev \
--cc=sj1557.seo@samsung.com \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.