提交 8527a25b 编写于 作者: J John Ferlan

qemu: Use qemuAliasFromHostdev

When building the command line alias and for SCSI Host Device deletion,
use the common API to build the alias
上级 647bc753
...@@ -4712,6 +4712,7 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev) ...@@ -4712,6 +4712,7 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev)
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
char *source = NULL; char *source = NULL;
char *drivealias = NULL;
virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &dev->source.subsys.u.scsi;
if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) {
...@@ -4723,9 +4724,12 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev) ...@@ -4723,9 +4724,12 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev)
goto error; goto error;
virBufferAsprintf(&buf, "file=/dev/%s,if=none", source); virBufferAsprintf(&buf, "file=/dev/%s,if=none", source);
} }
virBufferAsprintf(&buf, ",id=%s-%s", VIR_FREE(source);
virDomainDeviceAddressTypeToString(dev->info->type),
dev->info->alias); if (!(drivealias = qemuAliasFromHostdev(dev)))
goto error;
virBufferAsprintf(&buf, ",id=%s", drivealias);
VIR_FREE(drivealias);
if (dev->readonly) if (dev->readonly)
virBufferAddLit(&buf, ",readonly=on"); virBufferAddLit(&buf, ",readonly=on");
...@@ -4733,10 +4737,8 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev) ...@@ -4733,10 +4737,8 @@ qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev)
if (virBufferCheckError(&buf) < 0) if (virBufferCheckError(&buf) < 0)
goto error; goto error;
VIR_FREE(source);
return virBufferContentAndReset(&buf); return virBufferContentAndReset(&buf);
error: error:
VIR_FREE(source);
virBufferFreeAndReset(&buf); virBufferFreeAndReset(&buf);
return NULL; return NULL;
} }
...@@ -4748,6 +4750,7 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, ...@@ -4748,6 +4750,7 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
int model = -1; int model = -1;
char *driveAlias;
const char *contAlias; const char *contAlias;
model = virDomainDeviceFindControllerModel(def, dev->info, model = virDomainDeviceFindControllerModel(def, dev->info,
...@@ -4791,9 +4794,10 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def, ...@@ -4791,9 +4794,10 @@ qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
dev->info->addr.drive.unit); dev->info->addr.drive.unit);
} }
virBufferAsprintf(&buf, ",drive=%s-%s,id=%s", if (!(driveAlias = qemuAliasFromHostdev(dev)))
virDomainDeviceAddressTypeToString(dev->info->type), goto error;
dev->info->alias, dev->info->alias); virBufferAsprintf(&buf, ",drive=%s,id=%s", driveAlias, dev->info->alias);
VIR_FREE(driveAlias);
if (dev->info->bootIndex) if (dev->info->bootIndex)
virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex); virBufferAsprintf(&buf, ",bootindex=%u", dev->info->bootIndex);
......
...@@ -3184,7 +3184,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, ...@@ -3184,7 +3184,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
size_t i; size_t i;
int ret = -1; int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
char *drivestr = NULL; char *drivealias = NULL;
bool is_vfio = false; bool is_vfio = false;
VIR_DEBUG("Removing host device %s from domain %p %s", VIR_DEBUG("Removing host device %s from domain %p %s",
...@@ -3196,15 +3196,11 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, ...@@ -3196,15 +3196,11 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
} }
if (hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) { if (hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) {
/* build the actual drive id string as generated during if (!(drivealias = qemuAliasFromHostdev(hostdev)))
* qemuBuildSCSIHostdevDrvStr that is passed to qemu */
if (virAsprintf(&drivestr, "%s-%s",
virDomainDeviceAddressTypeToString(hostdev->info->type),
hostdev->info->alias) < 0)
goto cleanup; goto cleanup;
qemuDomainObjEnterMonitor(driver, vm); qemuDomainObjEnterMonitor(driver, vm);
qemuMonitorDriveDel(priv->mon, drivestr); qemuMonitorDriveDel(priv->mon, drivealias);
if (qemuDomainObjExitMonitor(driver, vm) < 0) if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup; goto cleanup;
} }
...@@ -3268,7 +3264,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, ...@@ -3268,7 +3264,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
ret = 0; ret = 0;
cleanup: cleanup:
VIR_FREE(drivestr); VIR_FREE(drivealias);
virObjectUnref(cfg); virObjectUnref(cfg);
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册