All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eryu Guan <guan@eryu.me>
To: Shiyang Ruan <ruansy.fnst@fujitsu.com>
Cc: fstests@vger.kernel.org
Subject: Re: [PATCH v3 12/17] generic: add buffered-io CoW test for mixed&source extents
Date: Sat, 25 Dec 2021 21:27:01 +0800	[thread overview]
Message-ID: <YcccJY4stD0rGmCL@desktop> (raw)
In-Reply-To: <20211214081914.2478122-13-ruansy.fnst@fujitsu.com>

On Tue, Dec 14, 2021 at 04:19:09PM +0800, Shiyang Ruan wrote:
> Ensuring that copy on write in buffered mode works when the CoW
> range originally covers multiple extents, mixed with reflinked, unwritten,
> hole, regular and delalloc blocks.
> 
> Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com>
> ---
>  common/reflink        | 51 +++++++++++++++++++++++++++++++++
>  tests/generic/910     | 65 +++++++++++++++++++++++++++++++++++++++++++
>  tests/generic/910.out | 12 ++++++++
>  3 files changed, 128 insertions(+)
>  create mode 100755 tests/generic/910
>  create mode 100644 tests/generic/910.out
> 
> diff --git a/common/reflink b/common/reflink
> index ee60398e..68dbdedd 100644
> --- a/common/reflink
> +++ b/common/reflink
> @@ -426,3 +426,54 @@ _sweave_reflink_holes_delalloc() {
>  		_pwrite_byte 0x64 $((blksz * i)) $blksz $sfile.chk
>  	done
>  }
> +
> +# Create a file of interleaved holes, unwritten blocks, regular blocks, and
> +# reflinked blocks
> +_sweave_reflink_rainbow() {
> +	blksz=$1
> +	nr=$2
> +	sfile=$3
> +	dfile=$4

These variables should be declared as local.

> +
> +	$XFS_IO_PROG -f -c "truncate $((blksz * nr))" $sfile
> +	_pwrite_byte 0x00 0 $((blksz * nr)) $sfile.chk
> +	_pwrite_byte 0x61 0 $((blksz * nr)) $dfile
> +	seq 0 5 $((nr - 1)) | while read i; do
> +		_pwrite_byte 0x61 $((blksz * i)) $blksz $sfile
> +		_pwrite_byte 0x61 $((blksz * i)) $blksz $sfile.chk
> +	done
> +	# 0 blocks are reflinked
> +	seq 0 5 $((nr - 1)) | while read i; do
> +		_reflink_range $sfile $((blksz * i)) $dfile $((blksz * i)) $blksz
> +		_pwrite_byte 0x61 $((blksz * i)) $blksz $sfile.chk
> +	done
> +	# 1 blocks are unwritten
> +	seq 1 5 $((nr - 1)) | while read i; do
> +		$XFS_IO_PROG -f -c "falloc $((blksz * i)) $blksz" $sfile
> +		_pwrite_byte 0x00 $((blksz * i)) $blksz $sfile.chk
> +	done
> +	# 2 blocks are holes
> +	seq 2 5 $((nr - 1)) | while read i; do
> +		_pwrite_byte 0x00 $((blksz * i)) $blksz $sfile.chk
> +	done
> +	# 3 blocks are regular
> +	seq 3 5 $((nr - 1)) | while read i; do
> +		_pwrite_byte 0x71 $((blksz * i)) $blksz $sfile
> +		_pwrite_byte 0x71 $((blksz * i)) $blksz $sfile.chk
> +	done
> +	# 4 blocks will be delalloc later
> +}
> +
> +# For a file created with _sweave_reflink_rainbow, fill the holes with delalloc
> +# extents
> +_sweave_reflink_rainbow_delalloc() {
> +	blksz=$1
> +	nr=$2
> +	dfile=$3

Same here.

> +
> +	# 4 blocks are delalloc (do later)
> +	seq 4 5 $((nr - 1)) | while read i; do
> +		_pwrite_byte 0x62 $((blksz * i)) $blksz $sfile
> +		_pwrite_byte 0x62 $((blksz * i)) $blksz $sfile.chk

And there's no 'sfile' in this function, should be $dfile and $dfile.chk

I've fixed them all on commit.

Thanks,
Eryu

> +	done
> +}
> diff --git a/tests/generic/910 b/tests/generic/910
> new file mode 100755
> index 00000000..32628060
> --- /dev/null
> +++ b/tests/generic/910
> @@ -0,0 +1,65 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# FS QA Test No. 910
> +#
> +# Ensuring that copy on write in buffered mode works when the CoW
> +# range originally covers multiple extents, mixed with reflinked, unwritten,
> +# hole, regular and delalloc blocks.
> +#   - Create a file with the following repeating sequence of blocks:
> +#     1. reflinked
> +#     2. unwritten
> +#     3. hole
> +#     4. regular block
> +#     5. delalloc
> +#   - CoW across the halfway mark, starting with the unwritten extent.
> +#   - Check that the files are now different where we say they're different.
> +#
> +. ./common/preamble
> +_begin_fstest auto quick clone punch
> +
> +# Import common functions.
> +. ./common/filter
> +. ./common/reflink
> +
> +# real QA test starts here
> +_require_scratch_reflink
> +_require_scratch_delalloc
> +_require_xfs_io_command "falloc"
> +_require_xfs_io_command "fpunch"
> +
> +echo "Format and mount"
> +_scratch_mkfs > $seqres.full 2>&1
> +_scratch_mount >> $seqres.full 2>&1
> +
> +testdir=$SCRATCH_MNT/test-$seq
> +mkdir $testdir
> +
> +echo "Create the original files"
> +blksz=65536
> +nr=64
> +filesize=$((blksz * nr))
> +_sweave_reflink_rainbow $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
> +_scratch_cycle_mount
> +
> +echo "Compare files"
> +md5sum $testdir/file1 | _filter_scratch
> +md5sum $testdir/file3 | _filter_scratch
> +md5sum $testdir/file1.chk | _filter_scratch
> +
> +echo "CoW across the transition"
> +cowoff=$((filesize / 4))
> +cowsz=$((filesize / 2))
> +_sweave_reflink_rainbow_delalloc $blksz $nr $testdir/file1 >> $seqres.full
> +# now cow
> +$XFS_IO_PROG -f -c "pwrite -S 0x63 -b $cowsz $cowoff $cowsz" $testdir/file1 >> $seqres.full
> +_pwrite_byte 0x63 $cowoff $cowsz $testdir/file1.chk >> $seqres.full
> +_scratch_cycle_mount
> +
> +echo "Compare files"
> +md5sum $testdir/file1 | _filter_scratch
> +md5sum $testdir/file3 | _filter_scratch
> +md5sum $testdir/file1.chk | _filter_scratch
> +
> +# success, all done
> +status=0
> diff --git a/tests/generic/910.out b/tests/generic/910.out
> new file mode 100644
> index 00000000..12956584
> --- /dev/null
> +++ b/tests/generic/910.out
> @@ -0,0 +1,12 @@
> +QA output created by 910
> +Format and mount
> +Create the original files
> +Compare files
> +6366fd359371414186688a0ef6988893  SCRATCH_MNT/test-910/file1
> +bdbcf02ee0aa977795a79d25fcfdccb1  SCRATCH_MNT/test-910/file3
> +6366fd359371414186688a0ef6988893  SCRATCH_MNT/test-910/file1.chk
> +CoW across the transition
> +Compare files
> +26aa3a0749b867ec58363c8539ee5471  SCRATCH_MNT/test-910/file1
> +bdbcf02ee0aa977795a79d25fcfdccb1  SCRATCH_MNT/test-910/file3
> +26aa3a0749b867ec58363c8539ee5471  SCRATCH_MNT/test-910/file1.chk
> -- 
> 2.34.1
> 
> 

  reply	other threads:[~2021-12-25 13:27 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-14  8:18 [PATCH v3 00/17] generic: add some mmap CoW tests Shiyang Ruan
2021-12-14  8:18 ` [PATCH v3 01/17] generic: add mmap CoW test for ranges of two shared files Shiyang Ruan
2021-12-14  8:18 ` [PATCH v3 02/17] generic: add mmap CoW test for regular&destination extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 03/17] generic: add mmap CoW test for unwritten&destination extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 04/17] generic: add mmap CoW test for holes&destination extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 05/17] common/rc: Introduce _require_scratch_delalloc() Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 06/17] generic: add mmap CoW test for delalloc&destination extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 07/17] generic: add mmap CoW test for mixed&destination extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 08/17] generic: add mmap CoW test for regular&source extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 09/17] generic: add mmap CoW test for unwritten&source extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 10/17] generic: add mmap CoW test for holes&source extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 11/17] generic: add mmap CoW test for delalloc&source extents Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 12/17] generic: add buffered-io CoW test for mixed&source extents Shiyang Ruan
2021-12-25 13:27   ` Eryu Guan [this message]
2021-12-14  8:19 ` [PATCH v3 13/17] generic: add direct-io " Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 14/17] generic: add mmap " Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 15/17] generic: add race test between reflink and mmap read Shiyang Ruan
2022-01-11 18:55   ` Darrick J. Wong
2022-01-12  2:38     ` Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 16/17] generic: add race test that mmap write to source of reflink Shiyang Ruan
2021-12-14  8:19 ` [PATCH v3 17/17] generic: add race test that mmap write to target " Shiyang Ruan
2021-12-19 16:04 ` [PATCH v3 00/17] generic: add some mmap CoW tests Eryu Guan

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=YcccJY4stD0rGmCL@desktop \
    --to=guan@eryu.me \
    --cc=fstests@vger.kernel.org \
    --cc=ruansy.fnst@fujitsu.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.