public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Chandan Babu R <chandan.babu@oracle.com>
Cc: fstests@vger.kernel.org, zlang@kernel.org, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 3/4] xfs/547: Verify that the correct inode extent counters are updated with/without nrext64
Date: Mon, 6 Jun 2022 08:40:47 -0700	[thread overview]
Message-ID: <Yp4f/yalwFunfEgz@magnolia> (raw)
In-Reply-To: <20220606124101.263872-4-chandan.babu@oracle.com>

On Mon, Jun 06, 2022 at 06:11:00PM +0530, Chandan Babu R wrote:
> This commit adds a new test to verify if the correct inode extent counter
> fields are updated with/without nrext64 mkfs option.
> 
> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
> ---
>  tests/xfs/547     | 91 +++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/547.out | 13 +++++++
>  2 files changed, 104 insertions(+)
>  create mode 100755 tests/xfs/547
>  create mode 100644 tests/xfs/547.out
> 
> diff --git a/tests/xfs/547 b/tests/xfs/547
> new file mode 100755
> index 00000000..d5137ca7
> --- /dev/null
> +++ b/tests/xfs/547
> @@ -0,0 +1,91 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022 Oracle.  All Rights Reserved.
> +#
> +# FS QA Test 547
> +#
> +# Verify that correct inode extent count fields are populated with and without
> +# nrext64 feature.
> +#
> +. ./common/preamble
> +_begin_fstest auto quick metadata
> +
> +# Import common functions.
> +. ./common/filter
> +. ./common/attr
> +. ./common/inject
> +. ./common/populate
> +
> +# real QA test starts here
> +_supported_fs xfs
> +_require_scratch
> +_require_scratch_xfs_nrext64
> +_require_attrs
> +_require_xfs_debug
> +_require_test_program "punch-alternating"
> +_require_xfs_io_error_injection "bmap_alloc_minlen_extent"
> +
> +for nrext64 in 0 1; do
> +	echo "* Verify extent counter fields with nrext64=${nrext64} option"
> +
> +	_scratch_mkfs -i nrext64=${nrext64} -d size=$((512 * 1024 * 1024)) \
> +		      >> $seqres.full
> +	_scratch_mount >> $seqres.full
> +
> +	bsize=$(_get_file_block_size $SCRATCH_MNT)
> +
> +	testfile=$SCRATCH_MNT/testfile
> +
> +	nr_blks=20
> +
> +	echo "Add blocks to test file's data fork"
> +	$XFS_IO_PROG -f -c "pwrite 0 $((nr_blks * bsize))" $testfile \
> +		     >> $seqres.full
> +	$here/src/punch-alternating $testfile
> +
> +	echo "Consume free space"
> +	fillerdir=$SCRATCH_MNT/fillerdir
> +	nr_free_blks=$(stat -f -c '%f' $SCRATCH_MNT)
> +	nr_free_blks=$((nr_free_blks * 90 / 100))
> +
> +	_fill_fs $((bsize * nr_free_blks)) $fillerdir $bsize 0 \
> +		 >> $seqres.full 2>&1
> +
> +	echo "Create fragmented filesystem"
> +	for dentry in $(ls -1 $fillerdir/); do
> +		$here/src/punch-alternating $fillerdir/$dentry >> $seqres.full
> +	done
> +
> +	echo "Inject bmap_alloc_minlen_extent error tag"
> +	_scratch_inject_error bmap_alloc_minlen_extent 1
> +
> +	echo "Add blocks to test file's attr fork"
> +	attr_len=255
> +	nr_attrs=$((nr_blks * bsize / attr_len))
> +	for i in $(seq 1 $nr_attrs); do
> +		attr="$(printf "trusted.%0247d" $i)"
> +		$SETFATTR_PROG -n "$attr" $testfile >> $seqres.full 2>&1
> +		[[ $? != 0 ]] && break
> +	done
> +
> +	testino=$(stat -c '%i' $testfile)
> +
> +	_scratch_unmount >> $seqres.full
> +
> +	dcnt=$(_scratch_xfs_get_metadata_field core.nextents "inode $testino")
> +	acnt=$(_scratch_xfs_get_metadata_field core.naextents "inode $testino")

Note: For any test requiring functionality added after 5.10, you can use
the xfs_db path command to avoid this sort of inode number saving:

dcnt=$(_scratch_xfs_get_metadata_field core.nextents "path /testfile")

Up to you if you want to change the test to do that; otherwise,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D

> +
> +	if (( $dcnt != 10 )); then
> +		echo "Invalid data fork extent count: $dextcnt"
> +		exit 1
> +	fi
> +
> +	if (( $acnt < 10 )); then
> +		echo "Invalid attr fork extent count: $aextcnt"
> +		exit 1
> +	fi
> +done
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/547.out b/tests/xfs/547.out
> new file mode 100644
> index 00000000..49fcc3c2
> --- /dev/null
> +++ b/tests/xfs/547.out
> @@ -0,0 +1,13 @@
> +QA output created by 547
> +* Verify extent counter fields with nrext64=0 option
> +Add blocks to test file's data fork
> +Consume free space
> +Create fragmented filesystem
> +Inject bmap_alloc_minlen_extent error tag
> +Add blocks to test file's attr fork
> +* Verify extent counter fields with nrext64=1 option
> +Add blocks to test file's data fork
> +Consume free space
> +Create fragmented filesystem
> +Inject bmap_alloc_minlen_extent error tag
> +Add blocks to test file's attr fork
> -- 
> 2.35.1
> 

  reply	other threads:[~2022-06-06 15:40 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-06 12:40 [PATCH 0/4] Large extent counters tests Chandan Babu R
2022-06-06 12:40 ` [PATCH 1/4] xfs/270: Fix ro mount failure when nrext64 option is enabled Chandan Babu R
2022-06-06 15:31   ` Darrick J. Wong
2022-06-07 23:51   ` Dave Chinner
2022-06-08  8:22     ` Chandan Babu R
2022-06-06 12:40 ` [PATCH 2/4] common/xfs: Add helper to check if nrext64 option is supported Chandan Babu R
2022-06-06 15:30   ` Darrick J. Wong
2022-06-07 23:01   ` Dave Chinner
2022-06-08  8:15     ` Chandan Babu R
2022-06-06 12:41 ` [PATCH 3/4] xfs/547: Verify that the correct inode extent counters are updated with/without nrext64 Chandan Babu R
2022-06-06 15:40   ` Darrick J. Wong [this message]
2022-06-07  9:36     ` Chandan Babu R
2022-06-08  3:59       ` Zorro Lang
2022-06-08  9:11         ` Chandan Babu R
2022-06-06 12:41 ` [PATCH 4/4] xfs/548: Verify correctness of upgrading an fs to support large extent counters Chandan Babu R
2022-06-06 15:35   ` Darrick J. Wong
2022-06-07  9:47     ` Chandan Babu R
2022-06-07 15:20       ` 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=Yp4f/yalwFunfEgz@magnolia \
    --to=djwong@kernel.org \
    --cc=chandan.babu@oracle.com \
    --cc=fstests@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=zlang@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