From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Ian Kent <raven@themaw.net>
Cc: linux-xfs <linux-xfs@vger.kernel.org>,
Christoph Hellwig <hch@infradead.org>,
Brian Foster <bfoster@redhat.com>,
Eric Sandeen <sandeen@sandeen.net>,
David Howells <dhowells@redhat.com>,
Dave Chinner <dchinner@redhat.com>,
Al Viro <viro@ZenIV.linux.org.uk>
Subject: Re: [PATCH v7 10/17] xfs: add xfs_remount_ro() helper
Date: Thu, 24 Oct 2019 08:32:01 -0700 [thread overview]
Message-ID: <20191024153201.GT913374@magnolia> (raw)
In-Reply-To: <157190348766.27074.17456421465521004386.stgit@fedora-28>
On Thu, Oct 24, 2019 at 03:51:27PM +0800, Ian Kent wrote:
> Factor the remount read only code into a helper to simplify the
> subsequent change from the super block method .remount_fs to the
> mount-api fs_context_operations method .reconfigure.
>
> This helper is only used by the mount code, so locate it along with
> that code.
>
> While we are at it change STATIC -> static for xfs_save_resvblks().
>
> Signed-off-by: Ian Kent <raven@themaw.net>
> Reviewed-by: Brian Foster <bfoster@redhat.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
Looks like a straightforward code extraction, so
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/xfs/xfs_super.c | 76 +++++++++++++++++++++++++++++++---------------------
> 1 file changed, 45 insertions(+), 31 deletions(-)
>
> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> index c07e41489e75..97c3f1edb69c 100644
> --- a/fs/xfs/xfs_super.c
> +++ b/fs/xfs/xfs_super.c
> @@ -48,6 +48,7 @@ static struct xfs_kobj xfs_dbg_kobj; /* global debug sysfs attrs */
> #endif
>
> static void xfs_restore_resvblks(struct xfs_mount *mp);
> +static void xfs_save_resvblks(struct xfs_mount *mp);
>
> /*
> * Table driven mount option parser.
> @@ -519,6 +520,47 @@ xfs_remount_rw(
> return 0;
> }
>
> +static int
> +xfs_remount_ro(
> + struct xfs_mount *mp)
> +{
> + int error;
> +
> + /*
> + * Cancel background eofb scanning so it cannot race with the final
> + * log force+buftarg wait and deadlock the remount.
> + */
> + xfs_stop_block_reaping(mp);
> +
> + /* Get rid of any leftover CoW reservations... */
> + error = xfs_icache_free_cowblocks(mp, NULL);
> + if (error) {
> + xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
> + return error;
> + }
> +
> + /* Free the per-AG metadata reservation pool. */
> + error = xfs_fs_unreserve_ag_blocks(mp);
> + if (error) {
> + xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
> + return error;
> + }
> +
> + /*
> + * Before we sync the metadata, we need to free up the reserve block
> + * pool so that the used block count in the superblock on disk is
> + * correct at the end of the remount. Stash the current* reserve pool
> + * size so that if we get remounted rw, we can return it to the same
> + * size.
> + */
> + xfs_save_resvblks(mp);
> +
> + xfs_quiesce_attr(mp);
> + mp->m_flags |= XFS_MOUNT_RDONLY;
> +
> + return 0;
> +}
> +
> struct proc_xfs_info {
> uint64_t flag;
> char *str;
> @@ -1224,7 +1266,7 @@ xfs_fs_statfs(
> return 0;
> }
>
> -STATIC void
> +static void
> xfs_save_resvblks(struct xfs_mount *mp)
> {
> uint64_t resblks = 0;
> @@ -1378,37 +1420,9 @@ xfs_fs_remount(
>
> /* rw -> ro */
> if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & SB_RDONLY)) {
> - /*
> - * Cancel background eofb scanning so it cannot race with the
> - * final log force+buftarg wait and deadlock the remount.
> - */
> - xfs_stop_block_reaping(mp);
> -
> - /* Get rid of any leftover CoW reservations... */
> - error = xfs_icache_free_cowblocks(mp, NULL);
> - if (error) {
> - xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
> - return error;
> - }
> -
> - /* Free the per-AG metadata reservation pool. */
> - error = xfs_fs_unreserve_ag_blocks(mp);
> - if (error) {
> - xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
> + error = xfs_remount_ro(mp);
> + if (error)
> return error;
> - }
> -
> - /*
> - * Before we sync the metadata, we need to free up the reserve
> - * block pool so that the used block count in the superblock on
> - * disk is correct at the end of the remount. Stash the current
> - * reserve pool size so that if we get remounted rw, we can
> - * return it to the same size.
> - */
> - xfs_save_resvblks(mp);
> -
> - xfs_quiesce_attr(mp);
> - mp->m_flags |= XFS_MOUNT_RDONLY;
> }
>
> return 0;
>
next prev parent reply other threads:[~2019-10-24 15:32 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-24 7:50 [PATCH v7 00/17] xfs: mount API patch series Ian Kent
2019-10-24 7:50 ` [PATCH v7 01/17] vfs: add missing blkdev_put() in get_tree_bdev() Ian Kent
2019-10-24 7:50 ` [PATCH v7 02/17] xfs: remove very old mount option Ian Kent
2019-10-24 7:50 ` [PATCH v7 03/17] xfs: remove unused struct xfs_mount field m_fsname_len Ian Kent
2019-10-24 7:50 ` [PATCH v7 04/17] xfs: use super s_id instead of struct xfs_mount m_fsname Ian Kent
2019-10-24 7:51 ` [PATCH v7 05/17] xfs: dont use XFS_IS_QUOTA_RUNNING() for option check Ian Kent
2019-10-25 13:52 ` Christoph Hellwig
2019-10-24 7:51 ` [PATCH v7 06/17] xfs: use kmem functions for struct xfs_mount Ian Kent
2019-10-24 15:26 ` Darrick J. Wong
2019-10-25 13:53 ` Christoph Hellwig
2019-10-24 7:51 ` [PATCH v7 07/17] xfs: move xfs_mount_alloc to be with parsing code Ian Kent
2019-10-25 14:31 ` Christoph Hellwig
2019-10-24 7:51 ` [PATCH v7 08/17] xfs: merge freeing of mp names and mp Ian Kent
2019-10-24 15:28 ` Darrick J. Wong
2019-10-25 14:37 ` Christoph Hellwig
2019-10-24 7:51 ` [PATCH v7 09/17] xfs: add xfs_remount_rw() helper Ian Kent
2019-10-24 15:31 ` Darrick J. Wong
2019-10-24 21:53 ` Ian Kent
2019-10-24 23:12 ` Darrick J. Wong
2019-10-25 16:45 ` Christoph Hellwig
2019-10-24 7:51 ` [PATCH v7 10/17] xfs: add xfs_remount_ro() helper Ian Kent
2019-10-24 15:32 ` Darrick J. Wong [this message]
2019-10-24 7:51 ` [PATCH v7 11/17] xfs: refactor suffix_kstrtoint() Ian Kent
2019-10-24 15:38 ` Darrick J. Wong
2019-10-24 22:02 ` Ian Kent
2019-10-25 14:39 ` Christoph Hellwig
2019-10-24 7:51 ` [PATCH v7 12/17] xfs: avoid redundant checks when options is empty Ian Kent
2019-10-24 15:40 ` Darrick J. Wong
2019-10-25 14:42 ` Christoph Hellwig
2019-10-24 7:51 ` [PATCH v7 13/17] xfs: refactor xfs_parseags() Ian Kent
2019-10-24 15:41 ` Darrick J. Wong
2019-10-24 7:51 ` [PATCH v7 14/17] xfs: move xfs_parseargs() validation to a helper Ian Kent
2019-10-24 15:51 ` Darrick J. Wong
2019-10-24 7:51 ` [PATCH v7 15/17] xfs: dont set sb in xfs_mount_alloc() Ian Kent
2019-10-24 7:51 ` [PATCH v7 16/17] xfs: move xfs_fs_fill_super() to be with parsing code Ian Kent
2019-10-24 7:52 ` [PATCH v7 17/17] xfs: switch to use the new mount-api Ian Kent
2019-10-25 17:01 ` Darrick J. Wong
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=20191024153201.GT913374@magnolia \
--to=darrick.wong@oracle.com \
--cc=bfoster@redhat.com \
--cc=dchinner@redhat.com \
--cc=dhowells@redhat.com \
--cc=hch@infradead.org \
--cc=linux-xfs@vger.kernel.org \
--cc=raven@themaw.net \
--cc=sandeen@sandeen.net \
--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.