From 023d69dfc8030b8746bb03cde85623f0e2a4a275 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 24 Jan 2019 17:24:56 +0100 Subject: [PATCH] qemu: Move shareable disk check for block copy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Ján Tomko --- 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 daaf86ad6d..4980f9f0ef 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -17142,16 +17142,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. @@ -17782,6 +17772,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) {