reflink: test a big CoW operation

Test what happens when we send largeish buffers to CoW all at once.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Darrick J. Wong
2015-12-21 18:36:26 +11:00
committed by Dave Chinner
parent 8ceac6e2f7
commit 2a885960ec
5 changed files with 226 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
#! /bin/bash
# FS QA Test No. 242
#
# Reflink two large files and CoW them in big chunks.
#
# This test is dependent on the system page size, so we cannot use md5 in
# the golden output; we can only compare to a check file.
#
#-----------------------------------------------------------------------
# Copyright (c) 2015, 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".* "$TESTDIR"
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_cp_reflink
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"
rm -rf $TESTDIR
mkdir $TESTDIR
BLKSZ=65536
NR=6400
BSZ=1280
FREE_BLOCKS=$(stat -f -c '%a' "$TESTDIR")
REAL_BLKSZ=$(stat -f -c '%S' "$TESTDIR")
SPACE_NEEDED=$(((BLKSZ * NR * 3) * 5 / 4))
SPACE_AVAIL=$((FREE_BLOCKS * REAL_BLKSZ))
test $SPACE_NEEDED -gt $SPACE_AVAIL && _notrun "Not enough space. $SPACE_AVAIL < $SPACE_NEEDED"
echo "Create the original files"
"$XFS_IO_PROG" -f -c "pwrite -S 0x61 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file1" >> "$seqres.full"
_cp_reflink "$TESTDIR/file1" "$TESTDIR/file2" >> "$seqres.full"
"$XFS_IO_PROG" -f -c "pwrite -S 0x61 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file2.chk" >> "$seqres.full"
_scratch_remount
echo "Compare files"
md5sum "$TESTDIR/file1" | _filter_scratch
md5sum "$TESTDIR/file2" | _filter_scratch
md5sum "$TESTDIR/file2.chk" | _filter_scratch
echo "CoW and unmount"
"$XFS_IO_PROG" -f -c "pwrite -S 0x63 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file2" >> "$seqres.full"
"$XFS_IO_PROG" -f -c "pwrite -S 0x63 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file2.chk" >> "$seqres.full"
_scratch_remount
echo "Compare files"
md5sum "$TESTDIR/file1" | _filter_scratch
md5sum "$TESTDIR/file2" | _filter_scratch
md5sum "$TESTDIR/file2.chk" | _filter_scratch
echo "Check for damage"
umount "$SCRATCH_MNT"
_check_scratch_fs
# success, all done
status=0
exit
+13
View File
@@ -0,0 +1,13 @@
QA output created by 242
Format and mount
Create the original files
Compare files
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-242/file1
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-242/file2
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-242/file2.chk
CoW and unmount
Compare files
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-242/file1
c835fd53fa27b72511b250d51595c053 SCRATCH_MNT/test-242/file2
c835fd53fa27b72511b250d51595c053 SCRATCH_MNT/test-242/file2.chk
Check for damage
+99
View File
@@ -0,0 +1,99 @@
#! /bin/bash
# FS QA Test No. 243
#
# Reflink two large files and DIO CoW them in big chunks.
#
# This test is dependent on the system page size, so we cannot use md5 in
# the golden output; we can only compare to a check file.
#
#-----------------------------------------------------------------------
# Copyright (c) 2015, 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".* "$TESTDIR"
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_cp_reflink
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"
rm -rf $TESTDIR
mkdir $TESTDIR
BLKSZ=65536
NR=6400
BSZ=1280
FREE_BLOCKS=$(stat -f -c '%a' "$TESTDIR")
REAL_BLKSZ=$(stat -f -c '%S' "$TESTDIR")
SPACE_NEEDED=$(((BLKSZ * NR * 3) * 5 / 4))
SPACE_AVAIL=$((FREE_BLOCKS * REAL_BLKSZ))
test $SPACE_NEEDED -gt $SPACE_AVAIL && _notrun "Not enough space. $SPACE_AVAIL < $SPACE_NEEDED"
echo "Create the original files"
"$XFS_IO_PROG" -f -c "pwrite -S 0x61 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file1" >> "$seqres.full"
_cp_reflink "$TESTDIR/file1" "$TESTDIR/file2" >> "$seqres.full"
"$XFS_IO_PROG" -f -c "pwrite -S 0x61 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file2.chk" >> "$seqres.full"
_scratch_remount
echo "Compare files"
md5sum "$TESTDIR/file1" | _filter_scratch
md5sum "$TESTDIR/file2" | _filter_scratch
md5sum "$TESTDIR/file2.chk" | _filter_scratch
echo "CoW and unmount"
"$XFS_IO_PROG" -d -f -c "pwrite -S 0x63 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file2" >> "$seqres.full"
"$XFS_IO_PROG" -f -c "pwrite -S 0x63 -b $((BLKSZ * BSZ)) 0 $((BLKSZ * NR))" "$TESTDIR/file2.chk" >> "$seqres.full"
_scratch_remount
echo "Compare files"
md5sum "$TESTDIR/file1" | _filter_scratch
md5sum "$TESTDIR/file2" | _filter_scratch
md5sum "$TESTDIR/file2.chk" | _filter_scratch
echo "Check for damage"
umount "$SCRATCH_MNT"
_check_scratch_fs
# success, all done
status=0
exit
+13
View File
@@ -0,0 +1,13 @@
QA output created by 243
Format and mount
Create the original files
Compare files
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-243/file1
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-243/file2
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-243/file2.chk
CoW and unmount
Compare files
01768a16d33c9bd21dc67a7fac006ee1 SCRATCH_MNT/test-243/file1
c835fd53fa27b72511b250d51595c053 SCRATCH_MNT/test-243/file2
c835fd53fa27b72511b250d51595c053 SCRATCH_MNT/test-243/file2.chk
Check for damage
+2
View File
@@ -244,6 +244,8 @@
239 auto aio rw
240 auto aio quick rw
241 auto
242 auto quick clone
243 auto quick clone
245 auto quick dir
246 auto quick rw
247 auto quick rw