From: Jiri Denemark Date: Thu, 20 Sep 2012 20:28:35 +0000 (+0200) Subject: qemu: Fix failure path in disk hotplug X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=8125113cdb61bb4352af8e80e66573282be9cf83;p=people%2Fliuw%2Flibxenctrl-split%2Flibvirt.git qemu: Fix failure path in disk hotplug Disk hotplug is a two phase action: qemuMonitorAddDrive followed by qemuMonitorAddDevice. When the first part succeeds but the second one fails, we need to rollback the drive addition. --- diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 4cd83fdf3..bcf3081a0 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -252,10 +252,16 @@ int qemuDomainAttachPciDiskDevice(virConnectPtr conn, if (ret == 0) { ret = qemuMonitorAddDevice(priv->mon, devstr); if (ret < 0) { - VIR_WARN("qemuMonitorAddDevice failed on %s (%s)", - drivestr, devstr); - /* XXX should call 'drive_del' on error but this does not - exist yet */ + virErrorPtr orig_err = virSaveLastError(); + if (qemuMonitorDriveDel(priv->mon, drivestr) < 0) { + VIR_WARN("Unable to remove drive %s (%s) after failed " + "qemuMonitorAddDevice", + drivestr, devstr); + } + if (orig_err) { + virSetError(orig_err); + virFreeError(orig_err); + } } } } else {