If any of the images in a chain above a raw image have bitmaps, libvirt
would attempt to merge them when doing a block commit or block copy
operation, which would result into a error in the logs as creating
persistent bitmaps in a raw image is not supported.
Since libvirt cares only about persisten bitmaps we can simply skip the
operation if the target of a block copy or block commit is a raw image.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_block.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index fab122942a..359595367b 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -3074,6 +3074,11 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSource *src,
{
virStorageSource *base = NULL;
+ /* if copy destination is a 'raw' image there's no point in attempting
to
+ * merge the bitmaps into it */
+ if (mirror->format == VIR_STORAGE_FILE_RAW)
+ return 0;
+
if (shallow)
base = src->backingStore;
@@ -3107,6 +3112,11 @@ qemuBlockBitmapsHandleCommitFinish(virStorageSource *topsrc,
{
virStorageSource *writebitmapsrc = NULL;
+ /* if base is a 'raw' image there's no point in attempting to merge the
+ * bitmaps into it */
+ if (basesrc->format == VIR_STORAGE_FILE_RAW)
+ return 0;
+
if (active)
writebitmapsrc = basesrc;
--
2.42.0