reflink: change block sharing with constant refcount

Ensure that we can handle the case where the refcount stays the same
even though the actual sharers changes.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
Darrick J. Wong
2016-05-25 22:57:49 -07:00
committed by Eryu Guan
parent ffad9122b6
commit 44b9337e09
5 changed files with 265 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
#! /bin/bash
# FS QA Test No. 358
#
# Share an extent amongst a bunch of files such that the refcount
# stays the same while the rate of change of the set of owners is
# steadily increasing. For example, an extent of 32 blocks is owned
# by 32 files. At block 1, change one of the owners. At block 2,
# change 2 of the owners, and so on.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016 Oracle, Inc. 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 7 15
_cleanup()
{
cd /
rm -rf $tmp.*
wait
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
echo "Format and mount"
_scratch_mkfs > $seqres.full 2>&1
_scratch_mount >> $seqres.full 2>&1
testdir=$SCRATCH_MNT/test-$seq
mkdir $testdir
blocks=64
blksz=65536
echo "Initialize file"
_pwrite_byte 0x61 0 $((blocks * blksz)) $testdir/file >> $seqres.full
echo "Share the file n-ways"
seq 1 $((blocks - 1)) | while read nr; do
_reflink_range $testdir/file 0 $testdir/file$nr.0 0 $((nr * blksz)) >> $seqres.full
seq $nr $((blocks - 1)) | while read nnr; do
_reflink_range $testdir/file $((nnr * blksz)) $testdir/file$nr.$nnr $((nnr * blksz)) $blksz >> $seqres.full
done
done
_scratch_cycle_mount
echo "Check output"
md5sum $testdir/file $testdir/file*.0 | _filter_scratch
# success, all done
status=0
exit
+69
View File
@@ -0,0 +1,69 @@
QA output created by 358
Format and mount
Initialize file
Share the file n-ways
Check output
bdbcf02ee0aa977795a79d25fcfdccb1 SCRATCH_MNT/test-358/file
2d61aa54b58c2e94403fb092c3dbc027 SCRATCH_MNT/test-358/file1.0
399c239a8d72b5b2beb15565cf14f6d6 SCRATCH_MNT/test-358/file10.0
7f783291615a5db41ba33d6c50318095 SCRATCH_MNT/test-358/file11.0
4feff1bdae53d042e572a5e240b1183f SCRATCH_MNT/test-358/file12.0
ac2b0a907cd84c091c1cc36384246e42 SCRATCH_MNT/test-358/file13.0
ff420a8abc25ff0a012638ddd9b81e6c SCRATCH_MNT/test-358/file14.0
3eb1751bcb7cff809df2ec376e45fe6f SCRATCH_MNT/test-358/file15.0
7202826a7791073fe2787f0c94603278 SCRATCH_MNT/test-358/file16.0
7b0fea2a208aa4738d8b9433c7b8421d SCRATCH_MNT/test-358/file17.0
c6b6ec99b28741ffb3be2d7ff361ad89 SCRATCH_MNT/test-358/file18.0
d609dcbdc972b8cff16acd74414a8dc9 SCRATCH_MNT/test-358/file19.0
81615449a98aaaad8dc179b3bec87f38 SCRATCH_MNT/test-358/file2.0
d97ae5fdb25c4622d5a2f313460a2b96 SCRATCH_MNT/test-358/file20.0
afae74f7a13edf57f43bab5da6e411d6 SCRATCH_MNT/test-358/file21.0
0ed53c341d0154d68c336eaa9d05990d SCRATCH_MNT/test-358/file22.0
ab20d0025b58cbf9fc49e436b7d7acef SCRATCH_MNT/test-358/file23.0
5279106ed91359051fbdb61e87d5077d SCRATCH_MNT/test-358/file24.0
9a8719c84c1a42d030fc6d700046eaf5 SCRATCH_MNT/test-358/file25.0
d9b21a065727fd8118d493f7c62e7fb2 SCRATCH_MNT/test-358/file26.0
d74ee01c55b2474f91a3723a01c83591 SCRATCH_MNT/test-358/file27.0
ba7202bfc4b9cda564156562d8672a3f SCRATCH_MNT/test-358/file28.0
1b3d697355ca662451eb12419cab8eef SCRATCH_MNT/test-358/file29.0
998b4ba52f2940dc515001e75926b19f SCRATCH_MNT/test-358/file3.0
6b2648f84c57f58786cf75ac06e37217 SCRATCH_MNT/test-358/file30.0
c400b872b0fb3fb58920c4e570937a32 SCRATCH_MNT/test-358/file31.0
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-358/file32.0
cac15c2eeaf1b63614469f675ec71c5f SCRATCH_MNT/test-358/file33.0
ebd2d819d56725bd1a2a35ababd06cad SCRATCH_MNT/test-358/file34.0
a26ebf37da9976dfd7c86b4271c59501 SCRATCH_MNT/test-358/file35.0
11f61aaa1f5f726929c91c6d434edf72 SCRATCH_MNT/test-358/file36.0
1f73d21c457843ea20048726d461648e SCRATCH_MNT/test-358/file37.0
9ed53cefd1548008ed1948286e471233 SCRATCH_MNT/test-358/file38.0
af5195351947da43e7a57f69086aa7d7 SCRATCH_MNT/test-358/file39.0
c946b71bb69c07daf25470742c967e7c SCRATCH_MNT/test-358/file4.0
f31ecd4106278b5fb1aeabdedd43036a SCRATCH_MNT/test-358/file40.0
e8a8d1a0873e25697171ebb87125d794 SCRATCH_MNT/test-358/file41.0
5920fd86bc7be6a0ef5d7ea283e16307 SCRATCH_MNT/test-358/file42.0
8360c3c368143821045f9b7994ab8344 SCRATCH_MNT/test-358/file43.0
6c76a6c9e2b039c82e62d985479f73ee SCRATCH_MNT/test-358/file44.0
8b5c6cab2f0da5ba2d3b2d3ca205ca75 SCRATCH_MNT/test-358/file45.0
b4ef05d705b8e99d8824d85e993bf8fa SCRATCH_MNT/test-358/file46.0
0db1f2d5ad692ccd8941a8bc308cdba2 SCRATCH_MNT/test-358/file47.0
6a11a8872b36343799a15617bea78cef SCRATCH_MNT/test-358/file48.0
015ab57c35525eeb776308e14fe2e731 SCRATCH_MNT/test-358/file49.0
17af09af790a9b4c79cddf72f6b642cb SCRATCH_MNT/test-358/file5.0
fbc6203955f9c6e9010f831971a073b2 SCRATCH_MNT/test-358/file50.0
aae01cd767e508bdf2d01f647d10c4b8 SCRATCH_MNT/test-358/file51.0
4d942a936328991bcd9821072ac0fd9e SCRATCH_MNT/test-358/file52.0
b77f243bb207746743aeaafbdef4203a SCRATCH_MNT/test-358/file53.0
9fc7f158bd2ded9df3965ef4fe2fa932 SCRATCH_MNT/test-358/file54.0
36dff6091853c946411bc40fdae79e84 SCRATCH_MNT/test-358/file55.0
82a2f6d28f1bff4ce7edc1a7a31b02cb SCRATCH_MNT/test-358/file56.0
b0d123bf023332bba783abb5b68e4c98 SCRATCH_MNT/test-358/file57.0
26b49b145b128c0abef0f92b3ccaf1d6 SCRATCH_MNT/test-358/file58.0
b5ef5d86d6ef15a535ee95b8069d29c9 SCRATCH_MNT/test-358/file59.0
cd3eccbf2f0126c4141740007ba70c3f SCRATCH_MNT/test-358/file6.0
205cb48615014f6f2377345b62442609 SCRATCH_MNT/test-358/file60.0
89691c001b3a3d5473081687ae519a18 SCRATCH_MNT/test-358/file61.0
a040ce9774652bd00c3cbf493a006e00 SCRATCH_MNT/test-358/file62.0
970b42855c15ee8caa824cd5e177759a SCRATCH_MNT/test-358/file63.0
eb74da58c6e4f93b4bf82a62fef4ab93 SCRATCH_MNT/test-358/file7.0
30c2557e8302a5beb290c71520d87f42 SCRATCH_MNT/test-358/file8.0
6dc42f5ed1007a3e20d08af71e198cdc SCRATCH_MNT/test-358/file9.0
+94
View File
@@ -0,0 +1,94 @@
#! /bin/bash
# FS QA Test No. 359
#
# Make sure that the reference counting mechanism can handle the case
# where we share the first 1/4 of an extent with a file, share the
# last 1/4 of the extent with a second file, share the first half of
# the extent with N files, and share the second half of the extent
# with a different set of N files. The key point here is to test that
# we handle the case where a refcount extent record doesn't coincide
# exactly with the block mapping records.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016 Oracle, Inc. 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 7 15
_cleanup()
{
cd /
rm -rf $tmp.*
wait
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/reflink
# real QA test starts here
_supported_os Linux
_require_scratch_reflink
echo "Format and mount"
_scratch_mkfs > $seqres.full 2>&1
_scratch_mount >> $seqres.full 2>&1
testdir=$SCRATCH_MNT/test-$seq
mkdir $testdir
blocks=64
blksz=65536
nr=4
halfway=$((blocks / 2 * blksz))
quarter=$((blocks / 4 * blksz))
echo "Initialize file"
_pwrite_byte 0x61 0 $((blocks * blksz)) $testdir/file >> $seqres.full
echo "Share the first half of the extent"
seq 1 $nr | while read nr; do
_reflink_range $testdir/file 0 $testdir/file$nr.0 0 $halfway >> $seqres.full
done
echo "Share the last half of the extent"
seq 1 $nr | while read nr; do
_reflink_range $testdir/file $halfway $testdir/file$nr.1 0 $halfway >> $seqres.full
done
echo "Share the first quarter of the extent"
_reflink_range $testdir/file 0 $testdir/file.2 0 $quarter >> $seqres.full
echo "Share the last quarter of the extent"
_reflink_range $testdir/file $((quarter * 3)) $testdir/file.3 0 $quarter >> $seqres.full
_scratch_cycle_mount
echo "Check output"
md5sum $testdir/file $testdir/file* | _filter_scratch
# success, all done
status=0
exit
+20
View File
@@ -0,0 +1,20 @@
QA output created by 359
Format and mount
Initialize file
Share the first half of the extent
Share the last half of the extent
Share the first quarter of the extent
Share the last quarter of the extent
Check output
bdbcf02ee0aa977795a79d25fcfdccb1 SCRATCH_MNT/test-359/file
bdbcf02ee0aa977795a79d25fcfdccb1 SCRATCH_MNT/test-359/file
7202826a7791073fe2787f0c94603278 SCRATCH_MNT/test-359/file.2
7202826a7791073fe2787f0c94603278 SCRATCH_MNT/test-359/file.3
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file1.0
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file1.1
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file2.0
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file2.1
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file3.0
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file3.1
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file4.0
de89461b64701958984c95d1bfb0065a SCRATCH_MNT/test-359/file4.1
+2
View File
@@ -360,3 +360,5 @@
355 auto quick
356 auto quick clone
357 auto quick clone
358 auto quick clone
359 auto quick clone