linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eryu Guan <guan@eryu.me>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: guaneryu@gmail.com, linux-xfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH 2/3] xfs: test correct propagation of rt extent size hints on rtinherit dirs
Date: Sun, 5 Sep 2021 22:35:57 +0800	[thread overview]
Message-ID: <YTTVzclyqLYLV+9R@desktop> (raw)
In-Reply-To: <163045509592.769915.9044627867698975012.stgit@magnolia>

On Tue, Aug 31, 2021 at 05:11:35PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> This is a regression test for the following fixes:
> 
>  xfs: standardize extent size hint validation
>  xfs: validate extsz hints against rt extent size when rtinherit is set
>  mkfs: validate rt extent size hint when rtinherit is set
> 
> These patches fix inadequate rtextsize alignment validation of extent
> size hints on directories with the rtinherit and extszinherit flags set.
> 
> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
> ---
>  tests/xfs/774     |   80 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/774.out |    5 +++
>  tests/xfs/776     |   57 ++++++++++++++++++++++++++++++++++++++
>  tests/xfs/776.out |    5 +++
>  4 files changed, 147 insertions(+)
>  create mode 100755 tests/xfs/774
>  create mode 100644 tests/xfs/774.out
>  create mode 100755 tests/xfs/776
>  create mode 100644 tests/xfs/776.out
> 
> 
> diff --git a/tests/xfs/774 b/tests/xfs/774
> new file mode 100755
> index 00000000..4c6bc2c9
> --- /dev/null
> +++ b/tests/xfs/774
> @@ -0,0 +1,80 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2021 Oracle.  All Rights Reserved.
> +#
> +# FS QA Test 774
> +#
> +# Regression test for kernel commits:
> +#
> +# 6b69e485894b ("xfs: standardize extent size hint validation")
> +# 603f000b15f2 ("xfs: validate extsz hints against rt extent size when rtinherit is set")
> +#
> +# Regression test for xfsprogs commit:
> +#
> +# 1e8afffb ("mkfs: validate rt extent size hint when rtinherit is set")
> +#
> +# Collectively, these patches ensure that we cannot set the extent size hint on
> +# a directory when the directory is configured to propagate its realtime and
> +# extent size hint to newly created files when the hint size isn't aligned to
> +# the size of a realtime extent.  If the patches aren't applied, the write will
> +# fail and xfs_repair will say that the fs is corrupt.
> +#
> +. ./common/preamble
> +_begin_fstest auto quick realtime

Also add 'mkfs' group? Or we could split the mkfs test into a new test?

> +
> +# Import common functions.
> +. ./common/filter
> +
> +# real QA test starts here
> +_supported_fs generic

_supported_fs xfs

> +_require_realtime
> +_require_scratch
> +
> +# Check mkfs.xfs option parsing with regards to rtinherit.  XFS doesn't require
> +# the realtime volume to be present to set rtinherit, so it's safe to call the
> +# mkfs binary directly, in dry run mode, with exactly the parameters we want to
> +# check.
> +mkfs_args=(-f -N -r extsize=7b -d extszinherit=15 $SCRATCH_DEV)
> +$MKFS_XFS_PROG -d rtinherit=1 "${mkfs_args[@]}" &>> $seqres.full && \
> +	echo "mkfs should not succeed with heritable rtext-unaligned extent hint"
> +$MKFS_XFS_PROG -d rtinherit=0 "${mkfs_args[@]}" &>> $seqres.full || \
> +	echo "mkfs should succeed with uninheritable rtext-unaligned extent hint"
> +
> +# Move on to checking the kernel's behavior
> +_scratch_mkfs -r extsize=7b | _filter_mkfs >> $seqres.full 2> $tmp.mkfs
> +cat $tmp.mkfs >> $seqres.full
> +. $tmp.mkfs
> +_scratch_mount
> +
> +test $rtextsz -ne $dbsize || _notrun "failed to set large rt extent size"

This message looks like a failure. Print which condition is not met?

> +
> +# Ensure there's no extent size hint set on the directory, then set the
> +# rtinherit bit on the directory to test propagation.
> +$XFS_IO_PROG -c 'extsize 0' -c 'chattr +t' $SCRATCH_MNT
> +
> +# Now try to set an extent size hint on the directory that isn't aligned to
> +# the rt extent size.
> +$XFS_IO_PROG -c "extsize $((rtextsz + dbsize))" $SCRATCH_MNT 2>&1 | _filter_scratch
> +$XFS_IO_PROG -c 'stat -v' $SCRATCH_MNT > $tmp.stat
> +cat $tmp.stat >> $seqres.full
> +grep -q 'fsxattr.xflags.*rt-inherit' $tmp.stat || \
> +	echo "rtinherit didn't get set on the directory?"
> +grep 'fsxattr.extsize' $tmp.stat
> +
> +# Propagate the hint from directory to file
> +echo moo > $SCRATCH_MNT/dummy
> +$XFS_IO_PROG -c 'stat -v' $SCRATCH_MNT/dummy > $tmp.stat
> +cat $tmp.stat >> $seqres.full
> +grep -q 'fsxattr.xflags.*realtime' $tmp.stat || \
> +	echo "realtime didnt' get set on the file?"
> +grep 'fsxattr.extsize' $tmp.stat
> +
> +# Cycle the mount to force the inode verifier to run.
> +_scratch_cycle_mount
> +
> +# Can we still access the dummy file?
> +cat $SCRATCH_MNT/dummy
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/774.out b/tests/xfs/774.out
> new file mode 100644
> index 00000000..767a504e
> --- /dev/null
> +++ b/tests/xfs/774.out
> @@ -0,0 +1,5 @@
> +QA output created by 774
> +xfs_io: FS_IOC_FSSETXATTR SCRATCH_MNT: Invalid argument
> +fsxattr.extsize = 0
> +fsxattr.extsize = 0
> +moo
> diff --git a/tests/xfs/776 b/tests/xfs/776
> new file mode 100755
> index 00000000..a62da9a5
> --- /dev/null
> +++ b/tests/xfs/776
> @@ -0,0 +1,57 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2021, Oracle.  All Rights Reserved.
> +#
> +# FS QA Test No. 776
> +#
> +# Functional test for xfsprogs commit:
> +#
> +# 5f062427 ("xfs_repair: validate alignment of inherited rt extent hints")
> +#
> +# This xfs_repair patch detects directories that are configured to propagate
> +# their realtime and extent size hints to newly created realtime files when the
> +# hint size isn't aligned to the size of a realtime extent.
> +#
> +# Since this is a test of userspace tool functionality, we don't need kernel
> +# support, which in turn means that we omit _require_realtime.  Note that XFS
> +# allows users to configure realtime extent size geometry and set RTINHERIT
> +# flags even if the filesystem itself does not have a realtime volume attached.
> +#
> +. ./common/preamble
> +_begin_fstest auto repair fuzzers
> +
> +# Import common functions.
> +. ./common/filter
> +
> +# real QA test starts here

_supported_fs xfs

> +_require_scratch
> +
> +echo "Format and mount"
> +_scratch_mkfs -r extsize=7b | _filter_mkfs > $seqres.full 2>$tmp.mkfs
> +cat $tmp.mkfs >> $seqres.full
> +. $tmp.mkfs
> +
> +test $rtextsz -ne $dbsize || _notrun "failed to set large rt extent size"

Same here.

Thanks,
Eryu

> +
> +_scratch_mount >> $seqres.full 2>&1
> +rootino=$(stat -c '%i' $SCRATCH_MNT)
> +_scratch_unmount
> +
> +echo "Misconfigure the root directory"
> +rtextsz_blks=$((rtextsz / dbsize))
> +_scratch_xfs_db -x -c "inode $rootino" \
> +	-c "write -d core.extsize $((rtextsz_blks + 1))" \
> +	-c 'write -d core.rtinherit 1' \
> +	-c 'write -d core.extszinherit 1' \
> +	-c 'print' >> $seqres.full
> +
> +echo "Detect misconfigured directory"
> +_scratch_xfs_repair -n >> $seqres.full 2>&1 && \
> +	echo "repair did not catch error?"
> +
> +echo "Repair misconfigured directory"
> +_scratch_xfs_repair >> $seqres.full 2>&1 || \
> +	echo "repair did not fix error?"
> +
> +status=0
> +exit
> diff --git a/tests/xfs/776.out b/tests/xfs/776.out
> new file mode 100644
> index 00000000..05ea73b2
> --- /dev/null
> +++ b/tests/xfs/776.out
> @@ -0,0 +1,5 @@
> +QA output created by 776
> +Format and mount
> +Misconfigure the root directory
> +Detect misconfigured directory
> +Repair misconfigured directory

  reply	other threads:[~2021-09-05 14:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-01  0:11 [PATCHSET 0/3] fstests: regression tests for 5.13/5.14 rt fixes Darrick J. Wong
2021-09-01  0:11 ` [PATCH 1/3] xfs: test fsx with extent size hints set on a realtime file Darrick J. Wong
2021-09-05 14:28   ` Eryu Guan
2021-09-13 17:37     ` Darrick J. Wong
2021-09-01  0:11 ` [PATCH 2/3] xfs: test correct propagation of rt extent size hints on rtinherit dirs Darrick J. Wong
2021-09-05 14:35   ` Eryu Guan [this message]
2021-09-13 17:57     ` Darrick J. Wong
2021-09-01  0:11 ` [PATCH 3/3] xfs: test adding realtime sections to filesystem Darrick J. Wong
2021-09-05 14:38   ` Eryu Guan
2021-09-13 18:02     ` Darrick J. Wong
  -- strict thread matches above, loose matches on Subject: below --
2021-09-15 23:42 [PATCHSET v2 0/3] fstests: regression tests for 5.13/5.14 rt fixes Darrick J. Wong
2021-09-15 23:42 ` [PATCH 2/3] xfs: test correct propagation of rt extent size hints on rtinherit dirs Darrick J. Wong
2021-07-28  0:10 [PATCHSET 0/3] fstests: regression tests for 5.13/5.14 rt fixes Darrick J. Wong
2021-07-28  0:10 ` [PATCH 2/3] xfs: test correct propagation of rt extent size hints on rtinherit dirs 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=YTTVzclyqLYLV+9R@desktop \
    --to=guan@eryu.me \
    --cc=djwong@kernel.org \
    --cc=fstests@vger.kernel.org \
    --cc=guaneryu@gmail.com \
    --cc=linux-xfs@vger.kernel.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).