xfs: test source CoW across mixed block types with cowextsz set

Ensure that we can CoW the source file when the source file consists
of a range of mixed block types and there's a cowextsize hint set.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
Darrick J. Wong
2016-02-10 09:20:45 -08:00
parent 4562a0f6d4
commit 5a1e1eda02
17 changed files with 852 additions and 0 deletions
Executable
+91
View File
@@ -0,0 +1,91 @@
#! /bin/bash
# FS QA Test No. 248
#
# Ensuring that copy on write in buffered mode to the source file when the
# CoW range covers regular unshared and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - Reflink the odd blocks of the first file into the second file.
# - CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_regular $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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))
$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_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 248
Format and mount
Create the original files
Compare files
bdbcf02ee0aa977795a79d25fcfdccb1 SCRATCH_MNT/test-248/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-248/file3
bdbcf02ee0aa977795a79d25fcfdccb1 SCRATCH_MNT/test-248/file1.chk
CoW across the transition
Compare files
2dc2b131303b2f70ddb480778caac8b7 SCRATCH_MNT/test-248/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-248/file3
2dc2b131303b2f70ddb480778caac8b7 SCRATCH_MNT/test-248/file1.chk
Executable
+92
View File
@@ -0,0 +1,92 @@
#! /bin/bash
# FS QA Test No. 249
#
# Ensuring that copy on write in directio mode to the source file when the
# CoW range covers regular unshared and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - Reflink the odd blocks of the first file into the second file.
# - dio CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
_require_odirect
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_regular $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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))
$XFS_IO_PROG -d -f -c "pwrite -S 0x63 -b $cowsz $cowoff $cowsz" $testdir/file1 >> $seqres.full
_pwrite_byte 0x63 $cowoff $cowsz $testdir/file1.chk >> $seqres.full
_scratch_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 249
Format and mount
Create the original files
Compare files
bdbcf02ee0aa977795a79d25fcfdccb1 SCRATCH_MNT/test-249/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-249/file3
bdbcf02ee0aa977795a79d25fcfdccb1 SCRATCH_MNT/test-249/file1.chk
CoW across the transition
Compare files
2dc2b131303b2f70ddb480778caac8b7 SCRATCH_MNT/test-249/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-249/file3
2dc2b131303b2f70ddb480778caac8b7 SCRATCH_MNT/test-249/file1.chk
Executable
+93
View File
@@ -0,0 +1,93 @@
#! /bin/bash
# FS QA Test No. 251
#
# Ensuring that copy on write in buffered mode to the source file when the
# CoW range covers unwritten and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - fallocate the first file.
# - Write the odd blocks of the first file.
# - Reflink the odd blocks of the first file into the second file.
# - CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_unwritten $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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))
$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_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 251
Format and mount
Create the original files
Compare files
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-251/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-251/file3
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-251/file1.chk
CoW across the transition
Compare files
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-251/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-251/file3
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-251/file1.chk
Executable
+94
View File
@@ -0,0 +1,94 @@
#! /bin/bash
# FS QA Test No. 254
#
# Ensuring that copy on write in directio mode to the source file when the
# CoW range covers unwritten and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - fallocate the first file.
# - Write the odd blocks of the first file.
# - Reflink the odd blocks of the first file into the second file.
# - DIO CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
_require_odirect
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_unwritten $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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))
$XFS_IO_PROG -d -f -c "pwrite -S 0x63 -b $cowsz $cowoff $cowsz" $testdir/file1 >> $seqres.full
_pwrite_byte 0x63 $cowoff $cowsz $testdir/file1.chk >> $seqres.full
_scratch_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 254
Format and mount
Create the original files
Compare files
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-254/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-254/file3
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-254/file1.chk
CoW across the transition
Compare files
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-254/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-254/file3
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-254/file1.chk
Executable
+93
View File
@@ -0,0 +1,93 @@
#! /bin/bash
# FS QA Test No. 255
#
# Ensuring that copy on write in buffered mode to the source file when the
# CoW range covers holes and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - Truncate the first file.
# - Write the odd blocks of the first file.
# - Reflink the odd blocks of the first file into the second file.
# - CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_holes $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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))
$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_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 255
Format and mount
Create the original files
Compare files
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-255/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-255/file3
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-255/file1.chk
CoW across the transition
Compare files
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-255/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-255/file3
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-255/file1.chk
Executable
+94
View File
@@ -0,0 +1,94 @@
#! /bin/bash
# FS QA Test No. 256
#
# Ensuring that copy on write in directio mode to the source file when the
# CoW range covers holes and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - Truncate the first file.
# - Write the odd blocks of the first file.
# - Reflink the odd blocks of the first file into the second file.
# - DIO CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
_require_odirect
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_holes $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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))
$XFS_IO_PROG -d -f -c "pwrite -S 0x63 -b $cowsz $cowoff $cowsz" $testdir/file1 >> $seqres.full
_pwrite_byte 0x63 $cowoff $cowsz $testdir/file1.chk >> $seqres.full
_scratch_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 256
Format and mount
Create the original files
Compare files
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-256/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-256/file3
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-256/file1.chk
CoW across the transition
Compare files
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-256/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-256/file3
e8cf59797f0b3758c8878c368bb4cf7e SCRATCH_MNT/test-256/file1.chk
Executable
+95
View File
@@ -0,0 +1,95 @@
#! /bin/bash
# FS QA Test No. 257
#
# Ensuring that copy on write in buffered mode to the source file when the
# CoW range covers delalloc blocks and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - Truncate the first file.
# - Write the odd blocks of the first file.
# - Reflink the odd blocks of the first file into the second file.
# - Write the even blocks of the first file.
# - CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_holes $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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_holes_delalloc $blksz $nr $testdir/file1 >> $seqres.full
$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_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 257
Format and mount
Create the original files
Compare files
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-257/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-257/file3
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-257/file1.chk
CoW across the transition
Compare files
35e2170e14665b780c6dec328d6a263b SCRATCH_MNT/test-257/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-257/file3
35e2170e14665b780c6dec328d6a263b SCRATCH_MNT/test-257/file1.chk
Executable
+96
View File
@@ -0,0 +1,96 @@
#! /bin/bash
# FS QA Test No. 258
#
# Ensuring that copy on write in directio mode to the source file when the
# CoW range covers delalloc blocks and regular shared blocks.
# - Set cowextsz.
# - Create two files.
# - Truncate the first file.
# - Write the odd blocks of the first file.
# - Reflink the odd blocks of the first file into the second file.
# - Write the even blocks of the first file.
# - DIO CoW the first file across the halfway mark, starting with the
# regular extent.
# - Check that the files are now different where we say they're different.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
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 -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"
_require_odirect
rm -f $seqres.full
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))
$XFS_IO_PROG -c "cowextsize $((blksz * 16))" $testdir >> $seqres.full
_sweave_reflink_holes $blksz $nr $testdir/file1 $testdir/file3 >> $seqres.full
_scratch_remount
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_holes_delalloc $blksz $nr $testdir/file1 >> $seqres.full
$XFS_IO_PROG -d -f -c "pwrite -S 0x63 -b $cowsz $cowoff $cowsz" $testdir/file1 >> $seqres.full
_pwrite_byte 0x63 $cowoff $cowsz $testdir/file1.chk >> $seqres.full
_scratch_remount
echo "Compare files"
md5sum $testdir/file1 | _filter_scratch
md5sum $testdir/file3 | _filter_scratch
md5sum $testdir/file1.chk | _filter_scratch
# success, all done
status=0
exit
+12
View File
@@ -0,0 +1,12 @@
QA output created by 258
Format and mount
Create the original files
Compare files
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-258/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-258/file3
b8a8a88d4c143f79900c4b4e79aa3e37 SCRATCH_MNT/test-258/file1.chk
CoW across the transition
Compare files
35e2170e14665b780c6dec328d6a263b SCRATCH_MNT/test-258/file1
ce2023f765eba19677517c511886d5c9 SCRATCH_MNT/test-258/file3
35e2170e14665b780c6dec328d6a263b SCRATCH_MNT/test-258/file1.chk
+8
View File
@@ -245,9 +245,17 @@
245 auto quick clone
246 auto quick clone
247 auto quick clone
248 auto quick clone
249 auto quick clone
250 auto quick rw prealloc metadata
251 auto quick clone
252 auto quick prealloc
253 auto quick
254 auto quick clone
255 auto quick clone
256 auto quick clone
257 auto quick clone
258 auto quick clone
259 auto quick
261 auto quick quota
262 auto quick quota