From: Brian Foster <bfoster@redhat.com>
To: Eric Sandeen <sandeen@sandeen.net>
Cc: cbay@excellency.fr, xfs@oss.sgi.com
Subject: Re: [PATCH V2] xfs: avoid false quotacheck after unclean shutdown
Date: Mon, 28 Jul 2014 11:02:28 -0400 [thread overview]
Message-ID: <20140728150227.GA59542@bfoster.bfoster> (raw)
In-Reply-To: <53D196DE.4060602@sandeen.net>
On Thu, Jul 24, 2014 at 06:29:34PM -0500, Eric Sandeen wrote:
> The commit
>
> 83e782e xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD
>
> added a new function xfs_sb_quota_from_disk() which swaps
> on-disk XFS_OQUOTA_* flags for in-core XFS_GQUOTA_* and XFS_PQUOTA_*
> flags after the superblock is read.
>
> However, if log recovery is required, the superblock is read again,
> and the modified in-core flags are re-read from disk, so we have
> XFS_OQUOTA_* flags in memory again. This causes the
> XFS_QM_NEED_QUOTACHECK() test to be true, because the XFS_OQUOTA_CHKD
> is still set, and not XFS_GQUOTA_CHKD or XFS_PQUOTA_CHKD.
>
> Change xfs_sb_from_disk to call xfs_sb_quota_from disk and always
> convert the disk flags to in-memory flags.
>
> Add a lower-level function which can be called with "false" to
> not convert the flags, so that the sb verifier can verify
> exactly what was on disk, per Brian Foster's suggestion.
>
> Reported-by: Cyril B. <cbay@excellency.fr>
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---
Looks good to me, thanks!
Reviewed-by: Brian Foster <bfoster@redhat.com>
>
> V2: Call xfs_sb_quota_from_disk from xfs_sb_from_disk,
> unless we're the verifier, which wants to see what is
> actually on-disk to verify it. Thanks Brian!
>
>
> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
> index 3507cd0..16d1671 100644
> --- a/fs/xfs/xfs_mount.c
> +++ b/fs/xfs/xfs_mount.c
> @@ -324,7 +324,6 @@ reread:
> * Initialize the mount structure from the superblock.
> */
> xfs_sb_from_disk(sbp, XFS_BUF_TO_SBP(bp));
> - xfs_sb_quota_from_disk(sbp);
>
> /*
> * If we haven't validated the superblock, do so now before we try
> diff --git a/fs/xfs/xfs_sb.c b/fs/xfs/xfs_sb.c
> index 7703fa6..0f631d2 100644
> --- a/fs/xfs/xfs_sb.c
> +++ b/fs/xfs/xfs_sb.c
> @@ -386,10 +386,11 @@ xfs_sb_quota_from_disk(struct xfs_sb *sbp)
> }
> }
>
> -void
> -xfs_sb_from_disk(
> +static void
> +__xfs_sb_from_disk(
> struct xfs_sb *to,
> - xfs_dsb_t *from)
> + xfs_dsb_t *from,
> + bool convert_xquota)
> {
> to->sb_magicnum = be32_to_cpu(from->sb_magicnum);
> to->sb_blocksize = be32_to_cpu(from->sb_blocksize);
> @@ -445,6 +446,17 @@ xfs_sb_from_disk(
> to->sb_pad = 0;
> to->sb_pquotino = be64_to_cpu(from->sb_pquotino);
> to->sb_lsn = be64_to_cpu(from->sb_lsn);
> + /* Convert on-disk flags to in-memory flags? */
> + if (convert_xquota)
> + xfs_sb_quota_from_disk(to);
> +}
> +
> +void
> +xfs_sb_from_disk(
> + struct xfs_sb *to,
> + xfs_dsb_t *from)
> +{
> + __xfs_sb_from_disk(to, from, true);
> }
>
> static inline void
> @@ -577,7 +589,11 @@ xfs_sb_verify(
> struct xfs_mount *mp = bp->b_target->bt_mount;
> struct xfs_sb sb;
>
> - xfs_sb_from_disk(&sb, XFS_BUF_TO_SBP(bp));
> + /*
> + * Use call variant which doesn't convert quota flags from disk
> + * format, because xfs_mount_validate_sb checks the on-disk flags.
> + */
> + __xfs_sb_from_disk(&sb, XFS_BUF_TO_SBP(bp), false);
>
> /*
> * Only check the in progress field for the primary superblock as
>
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
prev parent reply other threads:[~2014-07-28 15:02 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-22 13:16 Forced quotacheck after unclean unmount since 3.11, bisected Cyril B.
2014-07-22 16:48 ` Eric Sandeen
2014-07-22 17:10 ` [PATCH] xfs: avoid false quotacheck after unclean shutdown Eric Sandeen
2014-07-23 13:20 ` Brian Foster
2014-07-24 23:29 ` [PATCH V2] " Eric Sandeen
2014-07-28 15:02 ` Brian Foster [this message]
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=20140728150227.GA59542@bfoster.bfoster \
--to=bfoster@redhat.com \
--cc=cbay@excellency.fr \
--cc=sandeen@sandeen.net \
--cc=xfs@oss.sgi.com \
/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.