
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@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);