]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: hotplug: Disallow media change while blockjob is active
authorPeter Krempa <pkrempa@redhat.com>
Thu, 28 Mar 2019 11:23:43 +0000 (12:23 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 3 Apr 2019 09:58:09 +0000 (11:58 +0200)
Until the block job completes we can't change the disk chain. Removal
would fail as the block job still has reference to the chain.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_hotplug.c

index 150da34b4a31920bea48338ecbe1bb16cc7c4aa4..34249bd030ed974eb5c6f930b4d330b55251b93b 100644 (file)
@@ -852,10 +852,17 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
     VIR_AUTOUNREF(virQEMUDriverConfigPtr) cfg = virQEMUDriverGetConfig(driver);
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virStorageSourcePtr oldsrc = disk->src;
+    qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
     bool sharedAdded = false;
     int ret = -1;
     int rc;
 
+    if (diskPriv->blockjob && qemuBlockJobIsRunning(diskPriv->blockjob)) {
+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+                       _("can't change media while a block job is running on the device"));
+        return -1;
+    }
+
     disk->src = newsrc;
 
     if (virDomainDiskTranslateSourcePool(disk) < 0)