From: Chandan Babu R <chandanrlinux@gmail.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs@vger.kernel.org, hch@lst.de
Subject: Re: [PATCH 3/2] xfs: test rtalloc alignment and math errors
Date: Mon, 12 Oct 2020 14:03:57 +0530 [thread overview]
Message-ID: <3176897.ncsJDD4Lff@garuda> (raw)
In-Reply-To: <20201010175032.GB6559@magnolia>
On Saturday 10 October 2020 11:20:32 PM IST Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> Add a couple of regression tests for "xfs: make sure the rt allocator
> doesn't run off the end" and "xfs: ensure that fpunch, fcollapse, and
> finsert operations are aligned to rt extent size".
>
W.r.t "Make sure we validate realtime extent size alignment for fallocate
modes" test,
Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> tests/xfs/759 | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/xfs/759.out | 2 +
> tests/xfs/760 | 66 +++++++++++++++++++++++++++++++++++
> tests/xfs/760.out | 9 +++++
> tests/xfs/group | 2 +
> 5 files changed, 178 insertions(+)
> create mode 100755 tests/xfs/759
> create mode 100644 tests/xfs/759.out
> create mode 100755 tests/xfs/760
> create mode 100644 tests/xfs/760.out
>
> diff --git a/tests/xfs/759 b/tests/xfs/759
> new file mode 100755
> index 00000000..00573786
> --- /dev/null
> +++ b/tests/xfs/759
> @@ -0,0 +1,99 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# Copyright (c) 2020, Oracle. All Rights Reserved.
> +#
> +# FS QA Test No. 759
> +#
> +# This is a regression test for an overflow error in the _near realtime
> +# allocator. If the rt bitmap ends exactly at the end of a block and the
> +# number of rt extents is large enough to allow an allocation request larger
> +# than the maximum extent size, it's possible that during a large allocation
> +# request, the allocator will fail to constrain maxlen on the second run
> +# through the loop, and the rt bitmap range check will run right off the end of
> +# the rtbitmap file. When this happens, xfs triggers a verifier error and
> +# returns EFSCORRUPTED.
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1 # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> + cd /
> + rm -f $tmp.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# real QA test starts here
> +_supported_fs xfs
> +_require_scratch
> +_require_realtime
> +_require_test_program "punch-alternating"
> +
> +rm -f $seqres.full
> +
> +# Format filesystem to get the block size
> +_scratch_mkfs > $seqres.full
> +_scratch_mount >> $seqres.full
> +
> +blksz=$(_get_block_size $SCRATCH_MNT)
> +rextsize=$($XFS_INFO_PROG $SCRATCH_MNT | grep realtime.*extsz | sed -e 's/^.*extsz=\([0-9]*\).*$/\1/g')
> +rextblks=$((rextsize / blksz))
> +
> +echo "blksz $blksz rextsize $rextsize rextblks $rextblks" >> $seqres.full
> +
> +_scratch_unmount
> +
> +# Format filesystem with a realtime volume whose size fits the following:
> +# 1. Longer than (XFS MAXEXTLEN * blocksize) bytes.
> +# 2. Exactly a multiple of (NBBY * blksz * rextsize) bytes.
> +
> +rtsize1=$((2097151 * blksz))
> +rtsize2=$((8 * blksz * rextsize))
> +rtsize=$(( $(blockdev --getsz $SCRATCH_RTDEV) * 512 ))
> +
> +echo "rtsize1 $rtsize1 rtsize2 $rtsize2 rtsize $rtsize" >> $seqres.full
> +
> +test $rtsize -gt $rtsize1 || \
> + _notrun "scratch rt device too small, need $rtsize1 bytes"
> +test $rtsize -gt $rtsize2 || \
> + _notrun "scratch rt device too small, need $rtsize2 bytes"
> +
> +rtsize=$((rtsize - (rtsize % rtsize2)))
> +
> +echo "rt size will be $rtsize" >> $seqres.full
> +
> +_scratch_mkfs -r size=$rtsize >> $seqres.full
> +_scratch_mount >> $seqres.full
> +
> +# Make sure the root directory has rtinherit set so our test file will too
> +$XFS_IO_PROG -c 'chattr +t' $SCRATCH_MNT
> +
> +# Allocate some stuff at the start, to force the first falloc of the ouch file
> +# to happen somewhere in the middle of the rt volume
> +$XFS_IO_PROG -f -c 'falloc 0 64m' "$SCRATCH_MNT/b"
> +$here/src/punch-alternating -i $((rextblks * 2)) -s $((rextblks)) "$SCRATCH_MNT/b"
> +
> +avail="$(df -P "$SCRATCH_MNT" | awk 'END {print $4}')"1
> +toobig="$((avail * 2))"
> +
> +# falloc the ouch file in the middle of the rt extent to exercise the near
> +# allocator in the last step.
> +$XFS_IO_PROG -f -c 'falloc 0 1g' "$SCRATCH_MNT/ouch"
> +
> +# Try to get the near allocator to overflow on an allocation that matches
> +# exactly one of the rtsummary size levels. This should return ENOSPC and
> +# not EFSCORRUPTED.
> +$XFS_IO_PROG -f -c "falloc 0 ${toobig}k" "$SCRATCH_MNT/ouch"
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/759.out b/tests/xfs/759.out
> new file mode 100644
> index 00000000..df693d50
> --- /dev/null
> +++ b/tests/xfs/759.out
> @@ -0,0 +1,2 @@
> +QA output created by 759
> +fallocate: No space left on device
> diff --git a/tests/xfs/760 b/tests/xfs/760
> new file mode 100755
> index 00000000..7baa346c
> --- /dev/null
> +++ b/tests/xfs/760
> @@ -0,0 +1,66 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# Copyright (c) 2020, Oracle. All Rights Reserved.
> +#
> +# FS QA Test No. 760
> +#
> +# Make sure we validate realtime extent size alignment for fallocate modes.
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1 # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> + cd /
> + rm -f $tmp.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# real QA test starts here
> +_supported_fs xfs
> +_require_scratch
> +_require_realtime
> +_require_xfs_io_command "fcollapse"
> +_require_xfs_io_command "finsert"
> +_require_xfs_io_command "funshare"
> +_require_xfs_io_command "fzero"
> +_require_xfs_io_command "falloc"
> +
> +rm -f $seqres.full
> +
> +# Format filesystem with a 256k realtime extent size
> +_scratch_mkfs -r extsize=256k > $seqres.full
> +_scratch_mount >> $seqres.full
> +
> +blksz=$(_get_block_size $SCRATCH_MNT)
> +rextsize=$($XFS_INFO_PROG $SCRATCH_MNT | grep realtime.*extsz | sed -e 's/^.*extsz=\([0-9]*\).*$/\1/g')
> +rextblks=$((rextsize / blksz))
> +
> +echo "blksz $blksz rextsize $rextsize rextblks $rextblks" >> $seqres.full
> +
> +# Make sure the root directory has rtinherit set so our test file will too
> +$XFS_IO_PROG -c 'chattr +t' $SCRATCH_MNT
> +
> +sz=$((rextsize * 100))
> +range="$((blksz * 3)) $blksz"
> +
> +for verb in fpunch finsert fcollapse fzero funshare falloc; do
> + echo "test $verb"
> + $XFS_IO_PROG -f -c "falloc 0 $sz" "$SCRATCH_MNT/b"
> + $XFS_IO_PROG -f -c "$verb $range" "$SCRATCH_MNT/b"
> + rm -f "$SCRATCH_MNT/b"
> + _scratch_cycle_mount
> +done
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/760.out b/tests/xfs/760.out
> new file mode 100644
> index 00000000..3d73c6fa
> --- /dev/null
> +++ b/tests/xfs/760.out
> @@ -0,0 +1,9 @@
> +QA output created by 760
> +test fpunch
> +test finsert
> +fallocate: Invalid argument
> +test fcollapse
> +fallocate: Invalid argument
> +test fzero
> +test funshare
> +test falloc
> diff --git a/tests/xfs/group b/tests/xfs/group
> index c3c33b64..302f5157 100644
> --- a/tests/xfs/group
> +++ b/tests/xfs/group
> @@ -520,6 +520,8 @@
> 520 auto quick reflink
> 747 auto quick scrub
> 758 auto quick rw attr realtime
> +759 auto quick rw realtime
> +760 auto quick rw collapse punch insert zero prealloc
> 908 auto quick bigtime
> 909 auto quick bigtime quota
> 910 auto quick inobtcount
>
--
chandan
next prev parent reply other threads:[~2020-10-12 8:34 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-10 17:34 [PATCH 0/2] xfs: hopefully the last few rt fixes Darrick J. Wong
2020-10-10 17:34 ` [PATCH 1/2] xfs: annotate grabbing the realtime bitmap/summary locks in growfs Darrick J. Wong
2020-10-13 7:03 ` Chandan Babu R
2020-10-15 7:48 ` Christoph Hellwig
2020-10-10 17:34 ` [PATCH 2/2] xfs: fix fallocate functions when rtextsize is larger than 1 Darrick J. Wong
2020-10-12 6:28 ` Chandan Babu R
2020-10-15 7:54 ` Christoph Hellwig
2020-10-16 22:02 ` Darrick J. Wong
2020-10-10 17:50 ` [PATCH 3/2] xfs: test rtalloc alignment and math errors Darrick J. Wong
2020-10-12 8:33 ` Chandan Babu R [this message]
2020-10-10 17:50 ` [PATCH 4/2] xfs: test running growfs on the realtime volume Darrick J. Wong
2020-10-12 15:00 ` Chandan Babu R
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=3176897.ncsJDD4Lff@garuda \
--to=chandanrlinux@gmail.com \
--cc=darrick.wong@oracle.com \
--cc=hch@lst.de \
--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 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.