aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-08-19 22:19:11 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-08-19 22:19:11 +0100
commit1d806cef0e38b5db8347a8e12f214d543204a314 (patch)
treec681fc38e64a9775637cd22896216e87b1232b4e
parent672b2f2695891b6d818bddc3ce0df964c7627969 (diff)
parent1f3765b652930a3b485f1a67542c2410c3774abe (diff)
downloadqemu-1d806cef0e38b5db8347a8e12f214d543204a314.zip
qemu-1d806cef0e38b5db8347a8e12f214d543204a314.tar.gz
qemu-1d806cef0e38b5db8347a8e12f214d543204a314.tar.bz2
Merge remote-tracking branch 'remotes/maxreitz/tags/pull-block-2020-08-11' into staging
Block patches for 5.1.0-rc4: - Fix abort when running a backup job on an image whose size is not aligned to the backup job's cluster size # gpg: Signature made Tue 11 Aug 2020 10:29:27 BST # gpg: using RSA key 91BEB60A30DB3E8857D11829F407DB0061D5CF40 # gpg: issuer "mreitz@redhat.com" # gpg: Good signature from "Max Reitz <mreitz@redhat.com>" [full] # Primary key fingerprint: 91BE B60A 30DB 3E88 57D1 1829 F407 DB00 61D5 CF40 * remotes/maxreitz/tags/pull-block-2020-08-11: iotests: add test for unaligned granularity bitmap backup block/block-copy: always align copied region to cluster size Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--block/block-copy.c3
-rwxr-xr-xtests/qemu-iotests/30460
-rw-r--r--tests/qemu-iotests/304.out2
-rw-r--r--tests/qemu-iotests/group1
4 files changed, 66 insertions, 0 deletions
diff --git a/block/block-copy.c b/block/block-copy.c
index f7428a7..a30b909 100644
--- a/block/block-copy.c
+++ b/block/block-copy.c
@@ -142,6 +142,9 @@ static BlockCopyTask *block_copy_task_create(BlockCopyState *s,
return NULL;
}
+ assert(QEMU_IS_ALIGNED(offset, s->cluster_size));
+ bytes = QEMU_ALIGN_UP(bytes, s->cluster_size);
+
/* region is dirty, so no existent tasks possible in it */
assert(!find_conflicting_task(s, offset, bytes));
diff --git a/tests/qemu-iotests/304 b/tests/qemu-iotests/304
new file mode 100755
index 0000000..aaf9e14
--- /dev/null
+++ b/tests/qemu-iotests/304
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+#
+# Tests dirty-bitmap backup with unaligned bitmap granularity
+#
+# Copyright (c) 2020 Proxmox Server Solutions
+#
+# 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/>.
+#
+# owner=s.reiter@proxmox.com
+
+import iotests
+from iotests import qemu_img_create, qemu_img_log, file_path
+
+iotests.script_initialize(supported_fmts=['qcow2'],
+ supported_protocols=['file'])
+
+test_img = file_path('test.qcow2')
+target_img = file_path('target.qcow2')
+
+# unaligned by one byte
+image_len = 4097
+bitmap_granularity = 4096
+
+qemu_img_create('-f', iotests.imgfmt, test_img, str(image_len))
+
+# create VM
+vm = iotests.VM().add_drive(test_img)
+vm.launch()
+
+# write to the entire image
+vm.hmp_qemu_io('drive0', 'write -P0x16 0 4096');
+vm.hmp_qemu_io('drive0', 'write -P0x17 4096 1');
+
+# do backup and wait for completion
+vm.qmp('drive-backup', **{
+ 'device': 'drive0',
+ 'sync': 'full',
+ 'target': target_img
+})
+
+event = vm.event_wait(name='BLOCK_JOB_COMPLETED',
+ match={'data': {'device': 'drive0'}},
+ timeout=5.0)
+
+# shutdown to sync images
+vm.shutdown()
+
+# backup succeeded, check if image is correct
+qemu_img_log('compare', test_img, target_img)
diff --git a/tests/qemu-iotests/304.out b/tests/qemu-iotests/304.out
new file mode 100644
index 0000000..381cc05
--- /dev/null
+++ b/tests/qemu-iotests/304.out
@@ -0,0 +1,2 @@
+Images are identical.
+
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 025ed52..7f76066 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -309,3 +309,4 @@
299 auto quick
301 backing quick
302 quick
+304 rw quick