4 # See how well reflink handles reflinking the same block a million times.
6 #-----------------------------------------------------------------------
7 # Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
9 # This program is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU General Public License as
11 # published by the Free Software Foundation.
13 # This program is distributed in the hope that it would be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write the Free Software Foundation,
20 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 #-----------------------------------------------------------------------
24 seqres="$RESULT_DIR/$seq"
25 echo "QA output created by $seq"
29 status=1 # failure is the default!
30 trap "_cleanup; exit \$status" 0 1 2 3 15
38 # get standard environment, filters and checks
44 # real QA test starts here
46 _require_scratch_reflink
51 echo "Format and mount"
52 _scratch_mkfs > "$seqres.full" 2>&1
53 _scratch_mount >> "$seqres.full" 2>&1
55 testdir="$SCRATCH_MNT/test-$seq"
58 echo "Create a one block file"
59 blksz="$(_get_block_size $testdir)"
60 _pwrite_byte 0x61 0 $blksz "$testdir/file1" >> "$seqres.full"
64 truncate -s $(( (2 ** i) * blksz)) "$testdir/file1"
65 for i in $(seq 0 $fnr); do
66 echo " ++ Reflink size $i, $((2 ** i)) blocks" >> "$seqres.full"
67 n=$(( (2 ** i) * blksz))
68 _reflink_range "$testdir/file1" 0 "$testdir/file1" $n $n >> "$seqres.full"
72 echo "Reflink the big file"
73 blks=$((2 ** (fnr + 1) ))
74 bytes=$((blks * blksz))
75 echo "reflinking $blks blocks, $bytes bytes" >> "$seqres.full"
76 _reflink_range "$testdir/file1" 0 "$testdir/file2" 0 $bytes >> "$seqres.full"