]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemu: hotplug: Format proper source string for cdrom media change
authorPeter Krempa <pkrempa@redhat.com>
Fri, 8 Aug 2014 08:16:32 +0000 (10:16 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 20 Aug 2014 07:28:04 +0000 (09:28 +0200)
Use the qemu source string formatter to format the source string
correctly for remote and other storage instead of passing source->path
blindly.

src/qemu/qemu_driver.c
src/qemu/qemu_hotplug.c
src/qemu/qemu_hotplug.h

index c29e1c8657f95e244713c900b1c3feb919240b3c..628109dcfe4f41027cbdeb7f4d46df2727e185b4 100644 (file)
@@ -6681,7 +6681,8 @@ qemuDomainChangeDiskMediaLive(virConnectPtr conn,
         newsrc = disk->src;
         disk->src = NULL;
 
-        ret = qemuDomainChangeEjectableMedia(driver, vm, orig_disk, newsrc, force);
+        ret = qemuDomainChangeEjectableMedia(driver, conn, vm,
+                                             orig_disk, newsrc, force);
         /* 'disk' must not be accessed now - it has been freed.
          * 'orig_disk' now points to the new disk, while 'dev_copy'
          * now points to the old disk */
index f40434bc1d78b125f1712666cadd7c0de1607b81..1a2b4b27ffca1fc34acce43e76e335e60f142f0f 100644 (file)
@@ -139,6 +139,7 @@ qemuDomainPrepareDisk(virQEMUDriverPtr driver,
 
 
 int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
+                                   virConnectPtr conn,
                                    virDomainObjPtr vm,
                                    virDomainDiskDefPtr disk,
                                    virStorageSourcePtr newsrc,
@@ -149,6 +150,7 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
     qemuDomainObjPrivatePtr priv = vm->privateData;
     int retries = CHANGE_MEDIA_RETRIES;
     const char *format = NULL;
+    char *sourcestr = NULL;
 
     if (!disk->info.alias) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -198,7 +200,10 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
         goto error;
     }
 
-    if (newsrc->path) {
+    if (!virStorageSourceIsLocalStorage(newsrc) || newsrc->path) {
+        if (qemuGetDriveSourceString(newsrc, conn, &sourcestr) < 0)
+            goto error;
+
         if (virStorageSourceGetActualType(newsrc) != VIR_STORAGE_TYPE_DIR) {
             if (newsrc->format > 0) {
                 format = virStorageFileFormatTypeToString(newsrc->format);
@@ -210,7 +215,7 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
         qemuDomainObjEnterMonitor(driver, vm);
         ret = qemuMonitorChangeMedia(priv->mon,
                                      driveAlias,
-                                     newsrc->path,
+                                     sourcestr,
                                      format);
         qemuDomainObjExitMonitor(driver, vm);
     }
@@ -229,6 +234,7 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
  cleanup:
     virStorageSourceFree(newsrc);
     VIR_FREE(driveAlias);
+    VIR_FREE(sourcestr);
     return ret;
 
  error:
@@ -792,7 +798,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
         newsrc = disk->src;
         disk->src = NULL;
 
-        ret = qemuDomainChangeEjectableMedia(driver, vm, orig_disk, newsrc, false);
+        ret = qemuDomainChangeEjectableMedia(driver, conn, vm, orig_disk, newsrc, false);
         /* 'newsrc' must not be accessed now - it has been free'd.
          * 'orig_disk' now points to the new disk, while 'dev_copy'
          * now points to the old disk */
index a8fe231c110cd1113c4d54f97be1d92052399c3c..55c9333da5c6a39b9aefaf301c7d4eb06336634f 100644 (file)
@@ -29,6 +29,7 @@
 # include "domain_conf.h"
 
 int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
+                                   virConnectPtr conn,
                                    virDomainObjPtr vm,
                                    virDomainDiskDefPtr disk,
                                    virStorageSourcePtr newsrc,