The writing to an image actually starts when the copy job is initiated,
so checking this at the time of the pivot operation is too late.
Move the check to qemuDomainBlockCopyCommon. Note that modern qemu would
have prevented two writers with qcow2 so the slim possibility of a job
started with libvirtd without this patch missing the check is not really
worth worrying about.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_driver.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e422a44b2e..6674db7d20 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17140,16 +17140,6 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
goto cleanup;
}
- /* When pivoting to a shareable disk we need to make sure that the disk can
- * be safely shared, since block copy might have changed the format. */
- if (disk->src->shared && !disk->src->readonly &&
- !qemuBlockStorageSourceSupportsConcurrentAccess(disk->mirror)) {
- virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
- _("can't pivot a shared disk to a storage volume not
"
- "supporting sharing"));
- goto cleanup;
- }
-
/* Attempt the pivot. Record the attempt now, to prevent duplicate
* attempts; but the actual disk change will be made when emitting
* the event.
@@ -17780,6 +17770,16 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
}
}
+ /* When copying a shareable disk we need to make sure that the disk can
+ * be safely shared, since block copy may change the format. */
+ if (disk->src->shared && !disk->src->readonly &&
+ !qemuBlockStorageSourceSupportsConcurrentAccess(mirror)) {
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+ _("can't pivot a shared disk to a storage volume not
"
+ "supporting sharing"));
+ goto endjob;
+ }
+
/* pre-create the image file */
if (!reuse) {
if (virStorageFileCreate(mirror) < 0) {
--
2.20.1