Re: [PATCH 2/3] xfs: test correct propagation of rt extent size hints on rtinherit dirs

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Tue, Aug 31, 2021 at 05:11:35PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
> 
> 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@xxxxxxxxxx>
> ---
>  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



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux