[libvirt] [PATCH v2 8/9] qemu: Use qemuAssignSCSIHostDeviceDriveAlias

John Ferlan jferlan at redhat.com
Mon Aug 1 17:37:50 UTC 2016



On 07/19/2016 10:30 AM, John Ferlan wrote:
> When building the command line alias and for SCSI Host Device deletion,
> use the common API to build the alias
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/qemu/qemu_command.c | 12 +++++++-----
>  src/qemu/qemu_hotplug.c | 12 ++++--------
>  2 files changed, 11 insertions(+), 13 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 482f993..0c4b1f5 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -4534,6 +4534,7 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev)
>  {
>      virBuffer buf = VIR_BUFFER_INITIALIZER;
>      char *source = NULL;
> +    char *drivealias = NULL;
>      virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
>  
>      if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) {
> @@ -4545,9 +4546,12 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev)
>              goto error;
>          virBufferAsprintf(&buf, "file=/dev/%s,if=none", source);
>      }
> -    virBufferAsprintf(&buf, ",id=%s-%s",
> -                      virDomainDeviceAddressTypeToString(dev->info->type),
> -                      dev->info->alias);
> +    VIR_FREE(source);
> +
> +    if (!(drivealias = qemuAssignSCSIHostDeviceDriveAlias(dev)))
> +        goto error;
> +    virBufferAsprintf(&buf, ",id=%s", drivealias);
> +    VIR_FREE(drivealias);
>  
>      if (dev->readonly)
>          virBufferAddLit(&buf, ",readonly=on");
> @@ -4555,10 +4559,8 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev)
>      if (virBufferCheckError(&buf) < 0)
>          goto error;
>  
> -    VIR_FREE(source);
>      return virBufferContentAndReset(&buf);
>   error:
> -    VIR_FREE(source);
>      virBufferFreeAndReset(&buf);
>      return NULL;
>  }
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 9576509..4d3e913 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -3132,7 +3132,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>      size_t i;
>      int ret = -1;
>      qemuDomainObjPrivatePtr priv = vm->privateData;
> -    char *drivestr = NULL;
> +    char *drivealias = NULL;
>      bool is_vfio = false;
>  
>      VIR_DEBUG("Removing host device %s from domain %p %s",
> @@ -3144,15 +3144,11 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>      }
>  
>      if (hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) {
> -        /* build the actual drive id string as generated during
> -         * qemuBuildSCSIHostdevDrvStr that is passed to qemu */
> -        if (virAsprintf(&drivestr, "%s-%s",
> -                        virDomainDeviceAddressTypeToString(hostdev->info->type),
> -                        hostdev->info->alias) < 0)
> +        if (!(drivealias = qemuAssignSCSIHostDeviceDriveAlias(hostdev)))
>              goto cleanup;
>  
>          qemuDomainObjEnterMonitor(driver, vm);
> -        qemuMonitorDriveDel(priv->mon, drivestr);
> +        qemuMonitorDriveDel(priv->mon, drivealias);
>          if (qemuDomainObjExitMonitor(driver, vm) < 0)
>              goto cleanup;
>      }
> @@ -3216,7 +3212,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>      ret = 0;
>  
>   cleanup:
> -    VIR_FREE(drivestr);
> +    VIR_FREE(drivealias);
>      virObjectUnref(cfg);
>      return ret;
>  }
> 

Beyond changing the function name, squash the following in too:

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 99c41c8..fb0fb46 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4749,6 +4749,7 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
 {
     virBuffer buf = VIR_BUFFER_INITIALIZER;
     int model = -1;
+    char *driveAlias;
     const char *contAlias;
 
     model = virDomainDeviceFindControllerModel(def, dev->info,
@@ -4792,9 +4793,10 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
                           dev->info->addr.drive.unit);
     }
 
-    virBufferAsprintf(&buf, ",drive=%s-%s,id=%s",
-                      virDomainDeviceAddressTypeToString(dev->info->type),
-                      dev->info->alias, dev->info->alias);
+    if (!(driveAlias = qemuAliasFromHostdev(dev)))
+        goto error;
+    virBufferAsprintf(&buf, ",drive=%s,id=%s", driveAlias, dev->info->alias);
+    VIR_FREE(driveAlias);
 
     if (dev->info->bootIndex)
         virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex);




More information about the libvir-list mailing list