diff mbox series

generic/501: count with PAGE_SIZE instead of KB

Message ID 20200722063832.dpxn7weosdy2zp64@xzhoux.usersys.redhat.com (mailing list archive)
State New, archived
Headers show
Series generic/501: count with PAGE_SIZE instead of KB | expand

Commit Message

Murphy Zhou July 22, 2020, 6:38 a.m. UTC
Hard coded reflink offset/length numbers are not working well on 64K page
size arch like ppc64le, reporting:
	+XFS_IOC_CLONE_RANGE: Invalid argument

Because they are not aligned with the current PAGE_SIZE.

Translate original numbers into multiples of PAGE_SIZE. Then we're writing
different testfiles with different md5sums when PAGE_SIZE is different.
So we need to link different output file based on the current PAGE_SIZE.

This testcase is covering a btrfs regression which has been fixed in
v4.18. I tried to reproduce it on 4.17 kernel but failed with and
without this patch.

Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
---
 .gitignore                            |  1 +
 tests/generic/501                     | 17 +++++++++++++----
 tests/generic/{501.out => 501.out.4K} |  0
 tests/generic/501.out.64K             |  5 +++++
 4 files changed, 19 insertions(+), 4 deletions(-)
 rename tests/generic/{501.out => 501.out.4K} (100%)
 create mode 100644 tests/generic/501.out.64K

Comments

Filipe Manana July 22, 2020, 11:52 a.m. UTC | #1
On Wed, Jul 22, 2020 at 12:48 PM Zorro Lang <zlang@redhat.com> wrote:
>
> On Wed, Jul 22, 2020 at 02:38:32PM +0800, Murphy Zhou wrote:
> > Hard coded reflink offset/length numbers are not working well on 64K page
> > size arch like ppc64le, reporting:
> >       +XFS_IOC_CLONE_RANGE: Invalid argument
> >
> > Because they are not aligned with the current PAGE_SIZE.
> >
> > Translate original numbers into multiples of PAGE_SIZE. Then we're writing
> > different testfiles with different md5sums when PAGE_SIZE is different.
> > So we need to link different output file based on the current PAGE_SIZE.
> >
> > This testcase is covering a btrfs regression which has been fixed in
> > v4.18. I tried to reproduce it on 4.17 kernel but failed with and
> > without this patch.
> >
> > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> > ---
> >  .gitignore                            |  1 +
> >  tests/generic/501                     | 17 +++++++++++++----
> >  tests/generic/{501.out => 501.out.4K} |  0
> >  tests/generic/501.out.64K             |  5 +++++
> >  4 files changed, 19 insertions(+), 4 deletions(-)
> >  rename tests/generic/{501.out => 501.out.4K} (100%)
> >  create mode 100644 tests/generic/501.out.64K
> >
> > diff --git a/.gitignore b/.gitignore
> > index 5f5c4a0f..39318615 100644
> > --- a/.gitignore
> > +++ b/.gitignore
> > @@ -263,6 +263,7 @@
> >  /tests/xfs/033.out
> >  /tests/xfs/071.out
> >  /tests/xfs/096.out
> > +/tests/generic/501.out
> >
> >  # cscope files
> >  cscope.*
> > diff --git a/tests/generic/501 b/tests/generic/501
> > index 0d1f6ffe..4e589cda 100755
> > --- a/tests/generic/501
> > +++ b/tests/generic/501
> > @@ -9,6 +9,7 @@
> >  # the file again and then power fail, after we mount again the filesystem, no
> >  # file data was lost or corrupted.
> >  #
> > +seqfull=$0
> >  seq=`basename $0`
> >  seqres=$RESULT_DIR/$seq
> >  echo "QA output created by $seq"
> > @@ -42,14 +43,22 @@ _require_metadata_journaling $SCRATCH_DEV
> >  _init_flakey
> >  _mount_flakey
> >
> > -$XFS_IO_PROG -f -c "pwrite -S 0x18 9000K 6908K" $SCRATCH_MNT/foo >>$seqres.full
> > -$XFS_IO_PROG -f -c "pwrite -S 0x20 2572K 156K" $SCRATCH_MNT/bar >>$seqres.full
> > +pagesz=$(getconf PAGE_SIZE)
> > +
> > +if [ $pagesz -eq 65536 ] ; then
> > +     ln -sf $seqfull.out.64K $seqfull.out
> > +elif [ $pagesz -eq 4096 ] ; then
> > +     ln -sf $seqfull.out.4K $seqfull.out
> > +fi
>
> You can't sure there're only 4k and 64k system.
> This case trys to make sure the md5 of $SCRATCH_MNT/bar isn't changed before and
> after _flakey_drop_and_remount. So if you turn to use different pagesize, you
> can silence the golden image, and compare the md5 quietly. Something likes(just
> example):

This can be simpler. The test can be changed to use multiples of 64K,
so it will work everywhere (like other reflink tests).
I'll try it out and test on 4.17 to confirm it still reproduces the
original btrfs bug.

Thanks.

>
> diff --git a/tests/generic/501 b/tests/generic/501
> index 0d1f6ffe..7e7f9be5 100755
> --- a/tests/generic/501
> +++ b/tests/generic/501
> @@ -53,18 +53,21 @@ $XFS_IO_PROG -c "fsync" \
>              -c "fsync" \
>              $SCRATCH_MNT/bar >>$seqres.full
>
> -echo "File bar digest before power failure:"
> -md5sum $SCRATCH_MNT/bar | _filter_scratch
> +# File bar digest before power failure
> +md5sum $SCRATCH_MNT/bar > $tmp.md5.org
>
>  # Simulate a power failure and mount the filesystem to check that no file data
>  # was lost or corrupted.
>  _flakey_drop_and_remount
>
> -echo "File bar digest after power failure:"
> -md5sum $SCRATCH_MNT/bar | _filter_scratch
> +# File bar digest after power failure
> +md5sum $SCRATCH_MNT/bar > $tmp.md5.new
> +diff -u $tmp.md5.org $tmp.md5.new
>
>  _unmount_flakey
>  _cleanup_flakey
>
> +echo "Silence is golden"
> +
>  status=0
>  exit
> diff --git a/tests/generic/501.out b/tests/generic/501.out
> index 5d7da017..00133b63 100644
> --- a/tests/generic/501.out
> +++ b/tests/generic/501.out
> @@ -1,5 +1,2 @@
>  QA output created by 501
> -File bar digest before power failure:
> -95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
> -File bar digest after power failure:
> -95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
> +Silence is golden
>
> Thanks,
> Zorro
>
> > +
> > +$XFS_IO_PROG -f -c "pwrite -S 0x18 $((2250*pagesz)) $((1727*pagesz))" $SCRATCH_MNT/foo >>$seqres.full
> > +$XFS_IO_PROG -f -c "pwrite -S 0x20 $((643*pagesz)) $((39*pagesz))" $SCRATCH_MNT/bar >>$seqres.full
> >
> >  # We clone from file foo into a range of file bar that overlaps the existing
> >  # extent at file bar. The destination offset of the reflink operation matches
> > -# the eof position of file bar minus 4Kb.
> > +# the eof position of file bar minus 1 PAGE_SIZE.
> >  $XFS_IO_PROG -c "fsync" \
> > -          -c "reflink ${SCRATCH_MNT}/foo 0 2724K 15908K" \
> > +          -c "reflink ${SCRATCH_MNT}/foo 0 $((681*pagesz)) $((3977*pagesz))" \
> >            -c "fsync" \
> >            $SCRATCH_MNT/bar >>$seqres.full
> >
> > diff --git a/tests/generic/501.out b/tests/generic/501.out.4K
> > similarity index 100%
> > rename from tests/generic/501.out
> > rename to tests/generic/501.out.4K
> > diff --git a/tests/generic/501.out.64K b/tests/generic/501.out.64K
> > new file mode 100644
> > index 00000000..7e1013b2
> > --- /dev/null
> > +++ b/tests/generic/501.out.64K
> > @@ -0,0 +1,5 @@
> > +QA output created by 501
> > +File bar digest before power failure:
> > +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> > +File bar digest after power failure:
> > +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> > --
> > 2.20.1
> >
>
Zorro Lang July 22, 2020, 11:58 a.m. UTC | #2
On Wed, Jul 22, 2020 at 02:38:32PM +0800, Murphy Zhou wrote:
> Hard coded reflink offset/length numbers are not working well on 64K page
> size arch like ppc64le, reporting:
> 	+XFS_IOC_CLONE_RANGE: Invalid argument
> 
> Because they are not aligned with the current PAGE_SIZE.
> 
> Translate original numbers into multiples of PAGE_SIZE. Then we're writing
> different testfiles with different md5sums when PAGE_SIZE is different.
> So we need to link different output file based on the current PAGE_SIZE.
> 
> This testcase is covering a btrfs regression which has been fixed in
> v4.18. I tried to reproduce it on 4.17 kernel but failed with and
> without this patch.
> 
> Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> ---
>  .gitignore                            |  1 +
>  tests/generic/501                     | 17 +++++++++++++----
>  tests/generic/{501.out => 501.out.4K} |  0
>  tests/generic/501.out.64K             |  5 +++++
>  4 files changed, 19 insertions(+), 4 deletions(-)
>  rename tests/generic/{501.out => 501.out.4K} (100%)
>  create mode 100644 tests/generic/501.out.64K
> 
> diff --git a/.gitignore b/.gitignore
> index 5f5c4a0f..39318615 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -263,6 +263,7 @@
>  /tests/xfs/033.out
>  /tests/xfs/071.out
>  /tests/xfs/096.out
> +/tests/generic/501.out
>  
>  # cscope files
>  cscope.*
> diff --git a/tests/generic/501 b/tests/generic/501
> index 0d1f6ffe..4e589cda 100755
> --- a/tests/generic/501
> +++ b/tests/generic/501
> @@ -9,6 +9,7 @@
>  # the file again and then power fail, after we mount again the filesystem, no
>  # file data was lost or corrupted.
>  #
> +seqfull=$0
>  seq=`basename $0`
>  seqres=$RESULT_DIR/$seq
>  echo "QA output created by $seq"
> @@ -42,14 +43,22 @@ _require_metadata_journaling $SCRATCH_DEV
>  _init_flakey
>  _mount_flakey
>  
> -$XFS_IO_PROG -f -c "pwrite -S 0x18 9000K 6908K" $SCRATCH_MNT/foo >>$seqres.full
> -$XFS_IO_PROG -f -c "pwrite -S 0x20 2572K 156K" $SCRATCH_MNT/bar >>$seqres.full
> +pagesz=$(getconf PAGE_SIZE)
> +
> +if [ $pagesz -eq 65536 ] ; then
> +	ln -sf $seqfull.out.64K $seqfull.out
> +elif [ $pagesz -eq 4096 ] ; then
> +	ln -sf $seqfull.out.4K $seqfull.out
> +fi

You can't sure there're only 4k and 64k system.
This case trys to make sure the md5 of $SCRATCH_MNT/bar isn't changed before and
after _flakey_drop_and_remount. So if you turn to use different pagesize, you
can silence the golden image, and compare the md5 quietly. Something likes(just
example):

diff --git a/tests/generic/501 b/tests/generic/501
index 0d1f6ffe..7e7f9be5 100755
--- a/tests/generic/501
+++ b/tests/generic/501
@@ -53,18 +53,21 @@ $XFS_IO_PROG -c "fsync" \
             -c "fsync" \
             $SCRATCH_MNT/bar >>$seqres.full
 
-echo "File bar digest before power failure:"
-md5sum $SCRATCH_MNT/bar | _filter_scratch
+# File bar digest before power failure
+md5sum $SCRATCH_MNT/bar > $tmp.md5.org
 
 # Simulate a power failure and mount the filesystem to check that no file data
 # was lost or corrupted.
 _flakey_drop_and_remount
 
-echo "File bar digest after power failure:"
-md5sum $SCRATCH_MNT/bar | _filter_scratch
+# File bar digest after power failure
+md5sum $SCRATCH_MNT/bar > $tmp.md5.new
+diff -u $tmp.md5.org $tmp.md5.new
 
 _unmount_flakey
 _cleanup_flakey
 
+echo "Silence is golden"
+
 status=0
 exit
diff --git a/tests/generic/501.out b/tests/generic/501.out
index 5d7da017..00133b63 100644
--- a/tests/generic/501.out
+++ b/tests/generic/501.out
@@ -1,5 +1,2 @@
 QA output created by 501
-File bar digest before power failure:
-95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
-File bar digest after power failure:
-95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
+Silence is golden

Thanks,
Zorro

> +
> +$XFS_IO_PROG -f -c "pwrite -S 0x18 $((2250*pagesz)) $((1727*pagesz))" $SCRATCH_MNT/foo >>$seqres.full
> +$XFS_IO_PROG -f -c "pwrite -S 0x20 $((643*pagesz)) $((39*pagesz))" $SCRATCH_MNT/bar >>$seqres.full
>  
>  # We clone from file foo into a range of file bar that overlaps the existing
>  # extent at file bar. The destination offset of the reflink operation matches
> -# the eof position of file bar minus 4Kb.
> +# the eof position of file bar minus 1 PAGE_SIZE.
>  $XFS_IO_PROG -c "fsync" \
> -	     -c "reflink ${SCRATCH_MNT}/foo 0 2724K 15908K" \
> +	     -c "reflink ${SCRATCH_MNT}/foo 0 $((681*pagesz)) $((3977*pagesz))" \
>  	     -c "fsync" \
>  	     $SCRATCH_MNT/bar >>$seqres.full
>  
> diff --git a/tests/generic/501.out b/tests/generic/501.out.4K
> similarity index 100%
> rename from tests/generic/501.out
> rename to tests/generic/501.out.4K
> diff --git a/tests/generic/501.out.64K b/tests/generic/501.out.64K
> new file mode 100644
> index 00000000..7e1013b2
> --- /dev/null
> +++ b/tests/generic/501.out.64K
> @@ -0,0 +1,5 @@
> +QA output created by 501
> +File bar digest before power failure:
> +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> +File bar digest after power failure:
> +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> -- 
> 2.20.1
>
Murphy Zhou July 22, 2020, 12:59 p.m. UTC | #3
On Wed, Jul 22, 2020 at 12:52:16PM +0100, Filipe Manana wrote:
> On Wed, Jul 22, 2020 at 12:48 PM Zorro Lang <zlang@redhat.com> wrote:
> >
> > On Wed, Jul 22, 2020 at 02:38:32PM +0800, Murphy Zhou wrote:
> > > Hard coded reflink offset/length numbers are not working well on 64K page
> > > size arch like ppc64le, reporting:
> > >       +XFS_IOC_CLONE_RANGE: Invalid argument
> > >
> > > Because they are not aligned with the current PAGE_SIZE.
> > >
> > > Translate original numbers into multiples of PAGE_SIZE. Then we're writing
> > > different testfiles with different md5sums when PAGE_SIZE is different.
> > > So we need to link different output file based on the current PAGE_SIZE.
> > >
> > > This testcase is covering a btrfs regression which has been fixed in
> > > v4.18. I tried to reproduce it on 4.17 kernel but failed with and
> > > without this patch.
> > >
> > > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> > > ---
> > >  .gitignore                            |  1 +
> > >  tests/generic/501                     | 17 +++++++++++++----
> > >  tests/generic/{501.out => 501.out.4K} |  0
> > >  tests/generic/501.out.64K             |  5 +++++
> > >  4 files changed, 19 insertions(+), 4 deletions(-)
> > >  rename tests/generic/{501.out => 501.out.4K} (100%)
> > >  create mode 100644 tests/generic/501.out.64K
> > >
> > > diff --git a/.gitignore b/.gitignore
> > > index 5f5c4a0f..39318615 100644
> > > --- a/.gitignore
> > > +++ b/.gitignore
> > > @@ -263,6 +263,7 @@
> > >  /tests/xfs/033.out
> > >  /tests/xfs/071.out
> > >  /tests/xfs/096.out
> > > +/tests/generic/501.out
> > >
> > >  # cscope files
> > >  cscope.*
> > > diff --git a/tests/generic/501 b/tests/generic/501
> > > index 0d1f6ffe..4e589cda 100755
> > > --- a/tests/generic/501
> > > +++ b/tests/generic/501
> > > @@ -9,6 +9,7 @@
> > >  # the file again and then power fail, after we mount again the filesystem, no
> > >  # file data was lost or corrupted.
> > >  #
> > > +seqfull=$0
> > >  seq=`basename $0`
> > >  seqres=$RESULT_DIR/$seq
> > >  echo "QA output created by $seq"
> > > @@ -42,14 +43,22 @@ _require_metadata_journaling $SCRATCH_DEV
> > >  _init_flakey
> > >  _mount_flakey
> > >
> > > -$XFS_IO_PROG -f -c "pwrite -S 0x18 9000K 6908K" $SCRATCH_MNT/foo >>$seqres.full
> > > -$XFS_IO_PROG -f -c "pwrite -S 0x20 2572K 156K" $SCRATCH_MNT/bar >>$seqres.full
> > > +pagesz=$(getconf PAGE_SIZE)
> > > +
> > > +if [ $pagesz -eq 65536 ] ; then
> > > +     ln -sf $seqfull.out.64K $seqfull.out
> > > +elif [ $pagesz -eq 4096 ] ; then
> > > +     ln -sf $seqfull.out.4K $seqfull.out
> > > +fi
> >
> > You can't sure there're only 4k and 64k system.
> > This case trys to make sure the md5 of $SCRATCH_MNT/bar isn't changed before and
> > after _flakey_drop_and_remount. So if you turn to use different pagesize, you
> > can silence the golden image, and compare the md5 quietly. Something likes(just
> > example):
> 
> This can be simpler. The test can be changed to use multiples of 64K,

Agree! Thanks Zorro very much for suggestion!

> so it will work everywhere (like other reflink tests).
> I'll try it out and test on 4.17 to confirm it still reproduces the
> original btrfs bug.

Ya, this is important. I'm wondering if the original bug can be
reproduced by using multiples of 64k.

Thanks!
> 
> Thanks.
> 
> >
> > diff --git a/tests/generic/501 b/tests/generic/501
> > index 0d1f6ffe..7e7f9be5 100755
> > --- a/tests/generic/501
> > +++ b/tests/generic/501
> > @@ -53,18 +53,21 @@ $XFS_IO_PROG -c "fsync" \
> >              -c "fsync" \
> >              $SCRATCH_MNT/bar >>$seqres.full
> >
> > -echo "File bar digest before power failure:"
> > -md5sum $SCRATCH_MNT/bar | _filter_scratch
> > +# File bar digest before power failure
> > +md5sum $SCRATCH_MNT/bar > $tmp.md5.org
> >
> >  # Simulate a power failure and mount the filesystem to check that no file data
> >  # was lost or corrupted.
> >  _flakey_drop_and_remount
> >
> > -echo "File bar digest after power failure:"
> > -md5sum $SCRATCH_MNT/bar | _filter_scratch
> > +# File bar digest after power failure
> > +md5sum $SCRATCH_MNT/bar > $tmp.md5.new
> > +diff -u $tmp.md5.org $tmp.md5.new
> >
> >  _unmount_flakey
> >  _cleanup_flakey
> >
> > +echo "Silence is golden"
> > +
> >  status=0
> >  exit
> > diff --git a/tests/generic/501.out b/tests/generic/501.out
> > index 5d7da017..00133b63 100644
> > --- a/tests/generic/501.out
> > +++ b/tests/generic/501.out
> > @@ -1,5 +1,2 @@
> >  QA output created by 501
> > -File bar digest before power failure:
> > -95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
> > -File bar digest after power failure:
> > -95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
> > +Silence is golden
> >
> > Thanks,
> > Zorro
> >
> > > +
> > > +$XFS_IO_PROG -f -c "pwrite -S 0x18 $((2250*pagesz)) $((1727*pagesz))" $SCRATCH_MNT/foo >>$seqres.full
> > > +$XFS_IO_PROG -f -c "pwrite -S 0x20 $((643*pagesz)) $((39*pagesz))" $SCRATCH_MNT/bar >>$seqres.full
> > >
> > >  # We clone from file foo into a range of file bar that overlaps the existing
> > >  # extent at file bar. The destination offset of the reflink operation matches
> > > -# the eof position of file bar minus 4Kb.
> > > +# the eof position of file bar minus 1 PAGE_SIZE.
> > >  $XFS_IO_PROG -c "fsync" \
> > > -          -c "reflink ${SCRATCH_MNT}/foo 0 2724K 15908K" \
> > > +          -c "reflink ${SCRATCH_MNT}/foo 0 $((681*pagesz)) $((3977*pagesz))" \
> > >            -c "fsync" \
> > >            $SCRATCH_MNT/bar >>$seqres.full
> > >
> > > diff --git a/tests/generic/501.out b/tests/generic/501.out.4K
> > > similarity index 100%
> > > rename from tests/generic/501.out
> > > rename to tests/generic/501.out.4K
> > > diff --git a/tests/generic/501.out.64K b/tests/generic/501.out.64K
> > > new file mode 100644
> > > index 00000000..7e1013b2
> > > --- /dev/null
> > > +++ b/tests/generic/501.out.64K
> > > @@ -0,0 +1,5 @@
> > > +QA output created by 501
> > > +File bar digest before power failure:
> > > +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> > > +File bar digest after power failure:
> > > +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> > > --
> > > 2.20.1
> > >
> >
> 
> 
> -- 
> Filipe David Manana,
> 
> “Whether you think you can, or you think you can't — you're right.”
Zorro Lang July 22, 2020, 5:56 p.m. UTC | #4
On Wed, Jul 22, 2020 at 12:52:16PM +0100, Filipe Manana wrote:
> On Wed, Jul 22, 2020 at 12:48 PM Zorro Lang <zlang@redhat.com> wrote:
> >
> > On Wed, Jul 22, 2020 at 02:38:32PM +0800, Murphy Zhou wrote:
> > > Hard coded reflink offset/length numbers are not working well on 64K page
> > > size arch like ppc64le, reporting:
> > >       +XFS_IOC_CLONE_RANGE: Invalid argument
> > >
> > > Because they are not aligned with the current PAGE_SIZE.
> > >
> > > Translate original numbers into multiples of PAGE_SIZE. Then we're writing
> > > different testfiles with different md5sums when PAGE_SIZE is different.
> > > So we need to link different output file based on the current PAGE_SIZE.
> > >
> > > This testcase is covering a btrfs regression which has been fixed in
> > > v4.18. I tried to reproduce it on 4.17 kernel but failed with and
> > > without this patch.
> > >
> > > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> > > ---
> > >  .gitignore                            |  1 +
> > >  tests/generic/501                     | 17 +++++++++++++----
> > >  tests/generic/{501.out => 501.out.4K} |  0
> > >  tests/generic/501.out.64K             |  5 +++++
> > >  4 files changed, 19 insertions(+), 4 deletions(-)
> > >  rename tests/generic/{501.out => 501.out.4K} (100%)
> > >  create mode 100644 tests/generic/501.out.64K
> > >
> > > diff --git a/.gitignore b/.gitignore
> > > index 5f5c4a0f..39318615 100644
> > > --- a/.gitignore
> > > +++ b/.gitignore
> > > @@ -263,6 +263,7 @@
> > >  /tests/xfs/033.out
> > >  /tests/xfs/071.out
> > >  /tests/xfs/096.out
> > > +/tests/generic/501.out
> > >
> > >  # cscope files
> > >  cscope.*
> > > diff --git a/tests/generic/501 b/tests/generic/501
> > > index 0d1f6ffe..4e589cda 100755
> > > --- a/tests/generic/501
> > > +++ b/tests/generic/501
> > > @@ -9,6 +9,7 @@
> > >  # the file again and then power fail, after we mount again the filesystem, no
> > >  # file data was lost or corrupted.
> > >  #
> > > +seqfull=$0
> > >  seq=`basename $0`
> > >  seqres=$RESULT_DIR/$seq
> > >  echo "QA output created by $seq"
> > > @@ -42,14 +43,22 @@ _require_metadata_journaling $SCRATCH_DEV
> > >  _init_flakey
> > >  _mount_flakey
> > >
> > > -$XFS_IO_PROG -f -c "pwrite -S 0x18 9000K 6908K" $SCRATCH_MNT/foo >>$seqres.full
> > > -$XFS_IO_PROG -f -c "pwrite -S 0x20 2572K 156K" $SCRATCH_MNT/bar >>$seqres.full
> > > +pagesz=$(getconf PAGE_SIZE)
> > > +
> > > +if [ $pagesz -eq 65536 ] ; then
> > > +     ln -sf $seqfull.out.64K $seqfull.out
> > > +elif [ $pagesz -eq 4096 ] ; then
> > > +     ln -sf $seqfull.out.4K $seqfull.out
> > > +fi
> >
> > You can't sure there're only 4k and 64k system.
> > This case trys to make sure the md5 of $SCRATCH_MNT/bar isn't changed before and
> > after _flakey_drop_and_remount. So if you turn to use different pagesize, you
> > can silence the golden image, and compare the md5 quietly. Something likes(just
> > example):
> 
> This can be simpler. The test can be changed to use multiples of 64K,
> so it will work everywhere (like other reflink tests).
> I'll try it out and test on 4.17 to confirm it still reproduces the
> original btrfs bug.

Sure, if so, it's a simpler way to fix this failure.

Thanks,
Zorro

> 
> Thanks.
> 
> >
> > diff --git a/tests/generic/501 b/tests/generic/501
> > index 0d1f6ffe..7e7f9be5 100755
> > --- a/tests/generic/501
> > +++ b/tests/generic/501
> > @@ -53,18 +53,21 @@ $XFS_IO_PROG -c "fsync" \
> >              -c "fsync" \
> >              $SCRATCH_MNT/bar >>$seqres.full
> >
> > -echo "File bar digest before power failure:"
> > -md5sum $SCRATCH_MNT/bar | _filter_scratch
> > +# File bar digest before power failure
> > +md5sum $SCRATCH_MNT/bar > $tmp.md5.org
> >
> >  # Simulate a power failure and mount the filesystem to check that no file data
> >  # was lost or corrupted.
> >  _flakey_drop_and_remount
> >
> > -echo "File bar digest after power failure:"
> > -md5sum $SCRATCH_MNT/bar | _filter_scratch
> > +# File bar digest after power failure
> > +md5sum $SCRATCH_MNT/bar > $tmp.md5.new
> > +diff -u $tmp.md5.org $tmp.md5.new
> >
> >  _unmount_flakey
> >  _cleanup_flakey
> >
> > +echo "Silence is golden"
> > +
> >  status=0
> >  exit
> > diff --git a/tests/generic/501.out b/tests/generic/501.out
> > index 5d7da017..00133b63 100644
> > --- a/tests/generic/501.out
> > +++ b/tests/generic/501.out
> > @@ -1,5 +1,2 @@
> >  QA output created by 501
> > -File bar digest before power failure:
> > -95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
> > -File bar digest after power failure:
> > -95a95813a8c2abc9aa75a6c2914a077e  SCRATCH_MNT/bar
> > +Silence is golden
> >
> > Thanks,
> > Zorro
> >
> > > +
> > > +$XFS_IO_PROG -f -c "pwrite -S 0x18 $((2250*pagesz)) $((1727*pagesz))" $SCRATCH_MNT/foo >>$seqres.full
> > > +$XFS_IO_PROG -f -c "pwrite -S 0x20 $((643*pagesz)) $((39*pagesz))" $SCRATCH_MNT/bar >>$seqres.full
> > >
> > >  # We clone from file foo into a range of file bar that overlaps the existing
> > >  # extent at file bar. The destination offset of the reflink operation matches
> > > -# the eof position of file bar minus 4Kb.
> > > +# the eof position of file bar minus 1 PAGE_SIZE.
> > >  $XFS_IO_PROG -c "fsync" \
> > > -          -c "reflink ${SCRATCH_MNT}/foo 0 2724K 15908K" \
> > > +          -c "reflink ${SCRATCH_MNT}/foo 0 $((681*pagesz)) $((3977*pagesz))" \
> > >            -c "fsync" \
> > >            $SCRATCH_MNT/bar >>$seqres.full
> > >
> > > diff --git a/tests/generic/501.out b/tests/generic/501.out.4K
> > > similarity index 100%
> > > rename from tests/generic/501.out
> > > rename to tests/generic/501.out.4K
> > > diff --git a/tests/generic/501.out.64K b/tests/generic/501.out.64K
> > > new file mode 100644
> > > index 00000000..7e1013b2
> > > --- /dev/null
> > > +++ b/tests/generic/501.out.64K
> > > @@ -0,0 +1,5 @@
> > > +QA output created by 501
> > > +File bar digest before power failure:
> > > +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> > > +File bar digest after power failure:
> > > +3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
> > > --
> > > 2.20.1
> > >
> >
> 
> 
> -- 
> Filipe David Manana,
> 
> “Whether you think you can, or you think you can't — you're right.”
>
diff mbox series

Patch

diff --git a/.gitignore b/.gitignore
index 5f5c4a0f..39318615 100644
--- a/.gitignore
+++ b/.gitignore
@@ -263,6 +263,7 @@ 
 /tests/xfs/033.out
 /tests/xfs/071.out
 /tests/xfs/096.out
+/tests/generic/501.out
 
 # cscope files
 cscope.*
diff --git a/tests/generic/501 b/tests/generic/501
index 0d1f6ffe..4e589cda 100755
--- a/tests/generic/501
+++ b/tests/generic/501
@@ -9,6 +9,7 @@ 
 # the file again and then power fail, after we mount again the filesystem, no
 # file data was lost or corrupted.
 #
+seqfull=$0
 seq=`basename $0`
 seqres=$RESULT_DIR/$seq
 echo "QA output created by $seq"
@@ -42,14 +43,22 @@  _require_metadata_journaling $SCRATCH_DEV
 _init_flakey
 _mount_flakey
 
-$XFS_IO_PROG -f -c "pwrite -S 0x18 9000K 6908K" $SCRATCH_MNT/foo >>$seqres.full
-$XFS_IO_PROG -f -c "pwrite -S 0x20 2572K 156K" $SCRATCH_MNT/bar >>$seqres.full
+pagesz=$(getconf PAGE_SIZE)
+
+if [ $pagesz -eq 65536 ] ; then
+	ln -sf $seqfull.out.64K $seqfull.out
+elif [ $pagesz -eq 4096 ] ; then
+	ln -sf $seqfull.out.4K $seqfull.out
+fi
+
+$XFS_IO_PROG -f -c "pwrite -S 0x18 $((2250*pagesz)) $((1727*pagesz))" $SCRATCH_MNT/foo >>$seqres.full
+$XFS_IO_PROG -f -c "pwrite -S 0x20 $((643*pagesz)) $((39*pagesz))" $SCRATCH_MNT/bar >>$seqres.full
 
 # We clone from file foo into a range of file bar that overlaps the existing
 # extent at file bar. The destination offset of the reflink operation matches
-# the eof position of file bar minus 4Kb.
+# the eof position of file bar minus 1 PAGE_SIZE.
 $XFS_IO_PROG -c "fsync" \
-	     -c "reflink ${SCRATCH_MNT}/foo 0 2724K 15908K" \
+	     -c "reflink ${SCRATCH_MNT}/foo 0 $((681*pagesz)) $((3977*pagesz))" \
 	     -c "fsync" \
 	     $SCRATCH_MNT/bar >>$seqres.full
 
diff --git a/tests/generic/501.out b/tests/generic/501.out.4K
similarity index 100%
rename from tests/generic/501.out
rename to tests/generic/501.out.4K
diff --git a/tests/generic/501.out.64K b/tests/generic/501.out.64K
new file mode 100644
index 00000000..7e1013b2
--- /dev/null
+++ b/tests/generic/501.out.64K
@@ -0,0 +1,5 @@ 
+QA output created by 501
+File bar digest before power failure:
+3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar
+File bar digest after power failure:
+3058797b969076e91c518cb206b21163  SCRATCH_MNT/bar