mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
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:
committed by
Eryu Guan
parent
ffad9122b6
commit
44b9337e09
Executable
+80
@@ -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
|
||||
@@ -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
|
||||
Executable
+94
@@ -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
|
||||
@@ -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
|
||||
@@ -360,3 +360,5 @@
|
||||
355 auto quick
|
||||
356 auto quick clone
|
||||
357 auto quick clone
|
||||
358 auto quick clone
|
||||
359 auto quick clone
|
||||
|
||||
Reference in New Issue
Block a user