On 11.09.2015 17:41, Peter Krempa wrote: > Commit 8125113c added code that should remove the disk backend if the > fronted hotplug failed for any reason. The code had a bug though as it > used the disk string for unplug rather than the backend alias. Fix the > code by pre-creating an alias string and using it instead of the disk > string. In cases where qemu does not support QEMU_CAPS_DEVICE, we ignore > the unplug of the backend since we can't really create an alias in that > case. > > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1262399 > --- > src/qemu/qemu_hotplug.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c > index 63fafa6..c956e8c 100644 > --- a/src/qemu/qemu_hotplug.c > +++ b/src/qemu/qemu_hotplug.c > @@ -321,6 +321,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, > qemuDomainObjPrivatePtr priv = vm->privateData; > char *devstr = NULL; > char *drivestr = NULL; > + char *drivealias = NULL; > bool releaseaddr = false; > virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); > const char *src = virDomainDiskGetSource(disk); > @@ -365,6 +366,10 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, > if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps))) > goto error; > > + if (virAsprintf(&drivealias, "%s%s", QEMU_DRIVE_HOST_PREFIX, > + disk->info.alias) < 0) > + goto error; > + Maybe we can use qemuDeviceDriveHostAlias() instead of virAsprintf? > if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps))) > goto error; > } > @@ -379,7 +384,8 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, > ret = qemuMonitorAddDevice(priv->mon, devstr); > if (ret < 0) { > virErrorPtr orig_err = virSaveLastError(); > - if (qemuMonitorDriveDel(priv->mon, drivestr) < 0) { > + if (!drivealias || > + qemuMonitorDriveDel(priv->mon, drivealias) < 0) { > VIR_WARN("Unable to remove drive %s (%s) after failed " > "qemuMonitorAddDevice", > drivestr, devstr); > @@ -415,6 +421,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, > cleanup: > VIR_FREE(devstr); > VIR_FREE(drivestr); > + VIR_FREE(drivealias); > virObjectUnref(cfg); > return ret; > ACK Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list