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(a)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);