481 lines
19 KiB
Diff
481 lines
19 KiB
Diff
|
From e2a1b3fd32be8bb730656a6f22eb4f543b120c9d Mon Sep 17 00:00:00 2001
|
||
|
From: Kevin Wolf <kwolf@redhat.com>
|
||
|
Date: Mon, 8 Jun 2020 15:01:39 +0100
|
||
|
Subject: [PATCH 11/17] iotests: Test committing to short backing file
|
||
|
|
||
|
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
||
|
Message-id: <20200608150140.38218-11-kwolf@redhat.com>
|
||
|
Patchwork-id: 97453
|
||
|
O-Subject: [RHEL-AV-8.2.1 qemu-kvm PATCH 10/11] iotests: Test committing to short backing file
|
||
|
Bugzilla: 1780574
|
||
|
RH-Acked-by: Sergio Lopez Pascual <slp@redhat.com>
|
||
|
RH-Acked-by: Eric Blake <eblake@redhat.com>
|
||
|
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
||
|
|
||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||
|
Message-Id: <20200424125448.63318-10-kwolf@redhat.com>
|
||
|
Reviewed-by: Max Reitz <mreitz@redhat.com>
|
||
|
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
|
||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||
|
(cherry picked from commit bf03dede475e29a16f9188ea85a4d77cd3dcf2b7)
|
||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
||
|
---
|
||
|
tests/qemu-iotests/274 | 155 ++++++++++++++++++++++++++
|
||
|
tests/qemu-iotests/274.out | 268 +++++++++++++++++++++++++++++++++++++++++++++
|
||
|
tests/qemu-iotests/group | 1 +
|
||
|
3 files changed, 424 insertions(+)
|
||
|
create mode 100755 tests/qemu-iotests/274
|
||
|
create mode 100644 tests/qemu-iotests/274.out
|
||
|
|
||
|
diff --git a/tests/qemu-iotests/274 b/tests/qemu-iotests/274
|
||
|
new file mode 100755
|
||
|
index 0000000..e951f72
|
||
|
--- /dev/null
|
||
|
+++ b/tests/qemu-iotests/274
|
||
|
@@ -0,0 +1,155 @@
|
||
|
+#!/usr/bin/env python3
|
||
|
+#
|
||
|
+# Copyright (C) 2019 Red Hat, Inc.
|
||
|
+#
|
||
|
+# 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; either version 2 of the License, or
|
||
|
+# (at your option) any later version.
|
||
|
+#
|
||
|
+# This program is distributed in the hope that it will 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, see <http://www.gnu.org/licenses/>.
|
||
|
+#
|
||
|
+# Creator/Owner: Kevin Wolf <kwolf@redhat.com>
|
||
|
+#
|
||
|
+# Some tests for short backing files and short overlays
|
||
|
+
|
||
|
+import iotests
|
||
|
+
|
||
|
+iotests.verify_image_format(supported_fmts=['qcow2'])
|
||
|
+iotests.verify_platform(['linux'])
|
||
|
+
|
||
|
+size_short = 1 * 1024 * 1024
|
||
|
+size_long = 2 * 1024 * 1024
|
||
|
+size_diff = size_long - size_short
|
||
|
+
|
||
|
+def create_chain() -> None:
|
||
|
+ iotests.qemu_img_log('create', '-f', iotests.imgfmt, base,
|
||
|
+ str(size_long))
|
||
|
+ iotests.qemu_img_log('create', '-f', iotests.imgfmt, '-b', base, mid,
|
||
|
+ str(size_short))
|
||
|
+ iotests.qemu_img_log('create', '-f', iotests.imgfmt, '-b', mid, top,
|
||
|
+ str(size_long))
|
||
|
+
|
||
|
+ iotests.qemu_io_log('-c', 'write -P 1 0 %d' % size_long, base)
|
||
|
+
|
||
|
+def create_vm() -> iotests.VM:
|
||
|
+ vm = iotests.VM()
|
||
|
+ vm.add_blockdev('file,filename=%s,node-name=base-file' % base)
|
||
|
+ vm.add_blockdev('%s,file=base-file,node-name=base' % iotests.imgfmt)
|
||
|
+ vm.add_blockdev('file,filename=%s,node-name=mid-file' % mid)
|
||
|
+ vm.add_blockdev('%s,file=mid-file,node-name=mid,backing=base'
|
||
|
+ % iotests.imgfmt)
|
||
|
+ vm.add_drive(top, 'backing=mid,node-name=top')
|
||
|
+ return vm
|
||
|
+
|
||
|
+with iotests.FilePath('base') as base, \
|
||
|
+ iotests.FilePath('mid') as mid, \
|
||
|
+ iotests.FilePath('top') as top:
|
||
|
+
|
||
|
+ iotests.log('== Commit tests ==')
|
||
|
+
|
||
|
+ create_chain()
|
||
|
+
|
||
|
+ iotests.log('=== Check visible data ===')
|
||
|
+
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 1 0 %d' % size_short, top)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 0 %d %d' % (size_short, size_diff), top)
|
||
|
+
|
||
|
+ iotests.log('=== Checking allocation status ===')
|
||
|
+
|
||
|
+ iotests.qemu_io_log('-c', 'alloc 0 %d' % size_short,
|
||
|
+ '-c', 'alloc %d %d' % (size_short, size_diff),
|
||
|
+ base)
|
||
|
+
|
||
|
+ iotests.qemu_io_log('-c', 'alloc 0 %d' % size_short,
|
||
|
+ '-c', 'alloc %d %d' % (size_short, size_diff),
|
||
|
+ mid)
|
||
|
+
|
||
|
+ iotests.qemu_io_log('-c', 'alloc 0 %d' % size_short,
|
||
|
+ '-c', 'alloc %d %d' % (size_short, size_diff),
|
||
|
+ top)
|
||
|
+
|
||
|
+ iotests.log('=== Checking map ===')
|
||
|
+
|
||
|
+ iotests.qemu_img_log('map', '--output=json', base)
|
||
|
+ iotests.qemu_img_log('map', '--output=human', base)
|
||
|
+ iotests.qemu_img_log('map', '--output=json', mid)
|
||
|
+ iotests.qemu_img_log('map', '--output=human', mid)
|
||
|
+ iotests.qemu_img_log('map', '--output=json', top)
|
||
|
+ iotests.qemu_img_log('map', '--output=human', top)
|
||
|
+
|
||
|
+ iotests.log('=== Testing qemu-img commit (top -> mid) ===')
|
||
|
+
|
||
|
+ iotests.qemu_img_log('commit', top)
|
||
|
+ iotests.img_info_log(mid)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 1 0 %d' % size_short, mid)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 0 %d %d' % (size_short, size_diff), mid)
|
||
|
+
|
||
|
+ iotests.log('=== Testing HMP commit (top -> mid) ===')
|
||
|
+
|
||
|
+ create_chain()
|
||
|
+ with create_vm() as vm:
|
||
|
+ vm.launch()
|
||
|
+ vm.qmp_log('human-monitor-command', command_line='commit drive0')
|
||
|
+
|
||
|
+ iotests.img_info_log(mid)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 1 0 %d' % size_short, mid)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 0 %d %d' % (size_short, size_diff), mid)
|
||
|
+
|
||
|
+ iotests.log('=== Testing QMP active commit (top -> mid) ===')
|
||
|
+
|
||
|
+ create_chain()
|
||
|
+ with create_vm() as vm:
|
||
|
+ vm.launch()
|
||
|
+ vm.qmp_log('block-commit', device='top', base_node='mid',
|
||
|
+ job_id='job0', auto_dismiss=False)
|
||
|
+ vm.run_job('job0', wait=5)
|
||
|
+
|
||
|
+ iotests.img_info_log(mid)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 1 0 %d' % size_short, mid)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 0 %d %d' % (size_short, size_diff), mid)
|
||
|
+
|
||
|
+
|
||
|
+ iotests.log('== Resize tests ==')
|
||
|
+
|
||
|
+ # Use different sizes for different allocation modes:
|
||
|
+ #
|
||
|
+ # We want to have at least one test where 32 bit truncation in the size of
|
||
|
+ # the overlapping area becomes visible. This is covered by the
|
||
|
+ # prealloc='off' case (1G to 6G is an overlap of 5G).
|
||
|
+ #
|
||
|
+ # However, we can only do this for modes that don't preallocate data
|
||
|
+ # because otherwise we might run out of space on the test host.
|
||
|
+ #
|
||
|
+ # We also want to test some unaligned combinations.
|
||
|
+ for (prealloc, base_size, top_size_old, top_size_new, off) in [
|
||
|
+ ('off', '6G', '1G', '8G', '5G'),
|
||
|
+ ('metadata', '32G', '30G', '33G', '31G'),
|
||
|
+ ('falloc', '10M', '5M', '15M', '9M'),
|
||
|
+ ('full', '16M', '8M', '12M', '11M'),
|
||
|
+ ('off', '384k', '253k', '512k', '253k'),
|
||
|
+ ('off', '400k', '256k', '512k', '336k'),
|
||
|
+ ('off', '512k', '256k', '500k', '436k')]:
|
||
|
+
|
||
|
+ iotests.log('=== preallocation=%s ===' % prealloc)
|
||
|
+ iotests.qemu_img_log('create', '-f', iotests.imgfmt, base, base_size)
|
||
|
+ iotests.qemu_img_log('create', '-f', iotests.imgfmt, '-b', base, top,
|
||
|
+ top_size_old)
|
||
|
+ iotests.qemu_io_log('-c', 'write -P 1 %s 64k' % off, base)
|
||
|
+
|
||
|
+ # After this, top_size_old to base_size should be allocated/zeroed.
|
||
|
+ #
|
||
|
+ # In theory, leaving base_size to top_size_new unallocated would be
|
||
|
+ # correct, but in practice, if we zero out anything, we zero out
|
||
|
+ # everything up to top_size_new.
|
||
|
+ iotests.qemu_img_log('resize', '-f', iotests.imgfmt,
|
||
|
+ '--preallocation', prealloc, top, top_size_new)
|
||
|
+ iotests.qemu_io_log('-c', 'read -P 0 %s 64k' % off, top)
|
||
|
+ iotests.qemu_io_log('-c', 'map', top)
|
||
|
+ iotests.qemu_img_log('map', '--output=json', top)
|
||
|
diff --git a/tests/qemu-iotests/274.out b/tests/qemu-iotests/274.out
|
||
|
new file mode 100644
|
||
|
index 0000000..1a796fd
|
||
|
--- /dev/null
|
||
|
+++ b/tests/qemu-iotests/274.out
|
||
|
@@ -0,0 +1,268 @@
|
||
|
+== Commit tests ==
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=2097152 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-mid', fmt=qcow2 size=1048576 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=2097152 backing_file=TEST_DIR/PID-mid cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 2097152/2097152 bytes at offset 0
|
||
|
+2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+=== Check visible data ===
|
||
|
+read 1048576/1048576 bytes at offset 0
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+read 1048576/1048576 bytes at offset 1048576
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+=== Checking allocation status ===
|
||
|
+1048576/1048576 bytes allocated at offset 0 bytes
|
||
|
+1048576/1048576 bytes allocated at offset 1 MiB
|
||
|
+
|
||
|
+0/1048576 bytes allocated at offset 0 bytes
|
||
|
+0/0 bytes allocated at offset 1 MiB
|
||
|
+
|
||
|
+0/1048576 bytes allocated at offset 0 bytes
|
||
|
+0/1048576 bytes allocated at offset 1 MiB
|
||
|
+
|
||
|
+=== Checking map ===
|
||
|
+[{ "start": 0, "length": 2097152, "depth": 0, "zero": false, "data": true, "offset": 327680}]
|
||
|
+
|
||
|
+Offset Length Mapped to File
|
||
|
+0 0x200000 0x50000 TEST_DIR/PID-base
|
||
|
+
|
||
|
+[{ "start": 0, "length": 1048576, "depth": 1, "zero": false, "data": true, "offset": 327680}]
|
||
|
+
|
||
|
+Offset Length Mapped to File
|
||
|
+0 0x100000 0x50000 TEST_DIR/PID-base
|
||
|
+
|
||
|
+[{ "start": 0, "length": 1048576, "depth": 2, "zero": false, "data": true, "offset": 327680},
|
||
|
+{ "start": 1048576, "length": 1048576, "depth": 0, "zero": true, "data": false}]
|
||
|
+
|
||
|
+Offset Length Mapped to File
|
||
|
+0 0x100000 0x50000 TEST_DIR/PID-base
|
||
|
+
|
||
|
+=== Testing qemu-img commit (top -> mid) ===
|
||
|
+Image committed.
|
||
|
+
|
||
|
+image: TEST_IMG
|
||
|
+file format: IMGFMT
|
||
|
+virtual size: 2 MiB (2097152 bytes)
|
||
|
+cluster_size: 65536
|
||
|
+backing file: TEST_DIR/PID-base
|
||
|
+Format specific information:
|
||
|
+ compat: 1.1
|
||
|
+ lazy refcounts: false
|
||
|
+ refcount bits: 16
|
||
|
+ corrupt: false
|
||
|
+
|
||
|
+read 1048576/1048576 bytes at offset 0
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+read 1048576/1048576 bytes at offset 1048576
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+=== Testing HMP commit (top -> mid) ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=2097152 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-mid', fmt=qcow2 size=1048576 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=2097152 backing_file=TEST_DIR/PID-mid cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 2097152/2097152 bytes at offset 0
|
||
|
+2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+{"execute": "human-monitor-command", "arguments": {"command-line": "commit drive0"}}
|
||
|
+{"return": ""}
|
||
|
+image: TEST_IMG
|
||
|
+file format: IMGFMT
|
||
|
+virtual size: 2 MiB (2097152 bytes)
|
||
|
+cluster_size: 65536
|
||
|
+backing file: TEST_DIR/PID-base
|
||
|
+Format specific information:
|
||
|
+ compat: 1.1
|
||
|
+ lazy refcounts: false
|
||
|
+ refcount bits: 16
|
||
|
+ corrupt: false
|
||
|
+
|
||
|
+read 1048576/1048576 bytes at offset 0
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+read 1048576/1048576 bytes at offset 1048576
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+=== Testing QMP active commit (top -> mid) ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=2097152 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-mid', fmt=qcow2 size=1048576 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=2097152 backing_file=TEST_DIR/PID-mid cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 2097152/2097152 bytes at offset 0
|
||
|
+2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+{"execute": "block-commit", "arguments": {"auto-dismiss": false, "base-node": "mid", "device": "top", "job-id": "job0"}}
|
||
|
+{"return": {}}
|
||
|
+{"execute": "job-complete", "arguments": {"id": "job0"}}
|
||
|
+{"return": {}}
|
||
|
+{"data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "commit"}, "event": "BLOCK_JOB_READY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
||
|
+{"data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "commit"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
||
|
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
|
||
|
+{"return": {}}
|
||
|
+image: TEST_IMG
|
||
|
+file format: IMGFMT
|
||
|
+virtual size: 2 MiB (2097152 bytes)
|
||
|
+cluster_size: 65536
|
||
|
+backing file: TEST_DIR/PID-base
|
||
|
+Format specific information:
|
||
|
+ compat: 1.1
|
||
|
+ lazy refcounts: false
|
||
|
+ refcount bits: 16
|
||
|
+ corrupt: false
|
||
|
+
|
||
|
+read 1048576/1048576 bytes at offset 0
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+read 1048576/1048576 bytes at offset 1048576
|
||
|
+1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+== Resize tests ==
|
||
|
+=== preallocation=off ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=6442450944 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=1073741824 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 65536/65536 bytes at offset 5368709120
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+Image resized.
|
||
|
+
|
||
|
+read 65536/65536 bytes at offset 5368709120
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+1 GiB (0x40000000) bytes not allocated at offset 0 bytes (0x0)
|
||
|
+7 GiB (0x1c0000000) bytes allocated at offset 1 GiB (0x40000000)
|
||
|
+
|
||
|
+[{ "start": 0, "length": 1073741824, "depth": 1, "zero": true, "data": false},
|
||
|
+{ "start": 1073741824, "length": 7516192768, "depth": 0, "zero": true, "data": false}]
|
||
|
+
|
||
|
+=== preallocation=metadata ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=34359738368 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=32212254720 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 65536/65536 bytes at offset 33285996544
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+Image resized.
|
||
|
+
|
||
|
+read 65536/65536 bytes at offset 33285996544
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+30 GiB (0x780000000) bytes not allocated at offset 0 bytes (0x0)
|
||
|
+3 GiB (0xc0000000) bytes allocated at offset 30 GiB (0x780000000)
|
||
|
+
|
||
|
+[{ "start": 0, "length": 32212254720, "depth": 1, "zero": true, "data": false},
|
||
|
+{ "start": 32212254720, "length": 536870912, "depth": 0, "zero": true, "data": false, "offset": 327680},
|
||
|
+{ "start": 32749125632, "length": 536870912, "depth": 0, "zero": true, "data": false, "offset": 537264128},
|
||
|
+{ "start": 33285996544, "length": 536870912, "depth": 0, "zero": true, "data": false, "offset": 1074200576},
|
||
|
+{ "start": 33822867456, "length": 536870912, "depth": 0, "zero": true, "data": false, "offset": 1611137024},
|
||
|
+{ "start": 34359738368, "length": 536870912, "depth": 0, "zero": true, "data": false, "offset": 2148139008},
|
||
|
+{ "start": 34896609280, "length": 536870912, "depth": 0, "zero": true, "data": false, "offset": 2685075456}]
|
||
|
+
|
||
|
+=== preallocation=falloc ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=10485760 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=5242880 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 65536/65536 bytes at offset 9437184
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+Image resized.
|
||
|
+
|
||
|
+read 65536/65536 bytes at offset 9437184
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+5 MiB (0x500000) bytes not allocated at offset 0 bytes (0x0)
|
||
|
+10 MiB (0xa00000) bytes allocated at offset 5 MiB (0x500000)
|
||
|
+
|
||
|
+[{ "start": 0, "length": 5242880, "depth": 1, "zero": true, "data": false},
|
||
|
+{ "start": 5242880, "length": 10485760, "depth": 0, "zero": true, "data": false, "offset": 327680}]
|
||
|
+
|
||
|
+=== preallocation=full ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=16777216 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=8388608 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 65536/65536 bytes at offset 11534336
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+Image resized.
|
||
|
+
|
||
|
+read 65536/65536 bytes at offset 11534336
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+8 MiB (0x800000) bytes not allocated at offset 0 bytes (0x0)
|
||
|
+4 MiB (0x400000) bytes allocated at offset 8 MiB (0x800000)
|
||
|
+
|
||
|
+[{ "start": 0, "length": 8388608, "depth": 1, "zero": true, "data": false},
|
||
|
+{ "start": 8388608, "length": 4194304, "depth": 0, "zero": true, "data": false, "offset": 327680}]
|
||
|
+
|
||
|
+=== preallocation=off ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=393216 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=259072 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 65536/65536 bytes at offset 259072
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+Image resized.
|
||
|
+
|
||
|
+read 65536/65536 bytes at offset 259072
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+192 KiB (0x30000) bytes not allocated at offset 0 bytes (0x0)
|
||
|
+320 KiB (0x50000) bytes allocated at offset 192 KiB (0x30000)
|
||
|
+
|
||
|
+[{ "start": 0, "length": 196608, "depth": 1, "zero": true, "data": false},
|
||
|
+{ "start": 196608, "length": 65536, "depth": 0, "zero": false, "data": true, "offset": 327680},
|
||
|
+{ "start": 262144, "length": 262144, "depth": 0, "zero": true, "data": false}]
|
||
|
+
|
||
|
+=== preallocation=off ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=409600 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=262144 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 65536/65536 bytes at offset 344064
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+Image resized.
|
||
|
+
|
||
|
+read 65536/65536 bytes at offset 344064
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+256 KiB (0x40000) bytes not allocated at offset 0 bytes (0x0)
|
||
|
+256 KiB (0x40000) bytes allocated at offset 256 KiB (0x40000)
|
||
|
+
|
||
|
+[{ "start": 0, "length": 262144, "depth": 1, "zero": true, "data": false},
|
||
|
+{ "start": 262144, "length": 262144, "depth": 0, "zero": true, "data": false}]
|
||
|
+
|
||
|
+=== preallocation=off ===
|
||
|
+Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=524288 cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+Formatting 'TEST_DIR/PID-top', fmt=qcow2 size=262144 backing_file=TEST_DIR/PID-base cluster_size=65536 lazy_refcounts=off refcount_bits=16
|
||
|
+
|
||
|
+wrote 65536/65536 bytes at offset 446464
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+Image resized.
|
||
|
+
|
||
|
+read 65536/65536 bytes at offset 446464
|
||
|
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||
|
+
|
||
|
+256 KiB (0x40000) bytes not allocated at offset 0 bytes (0x0)
|
||
|
+244 KiB (0x3d000) bytes allocated at offset 256 KiB (0x40000)
|
||
|
+
|
||
|
+[{ "start": 0, "length": 262144, "depth": 1, "zero": true, "data": false},
|
||
|
+{ "start": 262144, "length": 249856, "depth": 0, "zero": true, "data": false}]
|
||
|
+
|
||
|
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
|
||
|
index 033b54d..cddae00 100644
|
||
|
--- a/tests/qemu-iotests/group
|
||
|
+++ b/tests/qemu-iotests/group
|
||
|
@@ -286,6 +286,7 @@
|
||
|
270 rw backing quick
|
||
|
272 rw
|
||
|
273 backing quick
|
||
|
+274 rw backing
|
||
|
277 rw quick
|
||
|
280 rw migration quick
|
||
|
281 rw quick
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|