1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

undefine: Implement internal API for qemu driver

* src/qemu/qemu_driver.c: New call back for qemu_driver,
New function qemudDomainUndefineFlags, and changes on
qemudDomainUndefine.
This commit is contained in:
Osier Yang 2011-07-20 11:04:15 +08:00
parent 0f8552a2fb
commit ae8e08aa28

View File

@ -4311,12 +4311,18 @@ cleanup:
return dom; return dom;
} }
static int qemudDomainUndefine(virDomainPtr dom) { static int
qemuDomainUndefineFlags(virDomainPtr dom,
unsigned int flags)
{
struct qemud_driver *driver = dom->conn->privateData; struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm; virDomainObjPtr vm;
virDomainEventPtr event = NULL; virDomainEventPtr event = NULL;
char *name = NULL;
int ret = -1; int ret = -1;
virCheckFlags(VIR_DOMAIN_UNDEFINE_MANAGED_SAVE, -1);
qemuDriverLock(driver); qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid); vm = virDomainFindByUUID(&driver->domains, dom->uuid);
@ -4340,6 +4346,26 @@ static int qemudDomainUndefine(virDomainPtr dom) {
goto cleanup; goto cleanup;
} }
name = qemuDomainManagedSavePath(driver, vm);
if (name == NULL)
goto cleanup;
if (virFileExists(name)) {
if (flags & VIR_DOMAIN_UNDEFINE_MANAGED_SAVE) {
if (unlink(name) < 0) {
qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Failed to remove domain managed "
"save image"));
goto cleanup;
}
} else {
qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("Refusing to undefine while domain managed "
"save image exists"));
goto cleanup;
}
}
if (virDomainDeleteConfig(driver->configDir, driver->autostartDir, vm) < 0) if (virDomainDeleteConfig(driver->configDir, driver->autostartDir, vm) < 0)
goto cleanup; goto cleanup;
@ -4354,6 +4380,7 @@ static int qemudDomainUndefine(virDomainPtr dom) {
ret = 0; ret = 0;
cleanup: cleanup:
VIR_FREE(name);
if (vm) if (vm)
virDomainObjUnlock(vm); virDomainObjUnlock(vm);
if (event) if (event)
@ -4362,6 +4389,12 @@ cleanup:
return ret; return ret;
} }
static int
qemudDomainUndefine(virDomainPtr dom)
{
return qemuDomainUndefineFlags(dom, 0);
}
static int static int
qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver, qemuDomainAttachDeviceDiskLive(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,
@ -8553,6 +8586,7 @@ static virDriver qemuDriver = {
.domainCreateWithFlags = qemudDomainStartWithFlags, /* 0.8.2 */ .domainCreateWithFlags = qemudDomainStartWithFlags, /* 0.8.2 */
.domainDefineXML = qemudDomainDefine, /* 0.2.0 */ .domainDefineXML = qemudDomainDefine, /* 0.2.0 */
.domainUndefine = qemudDomainUndefine, /* 0.2.0 */ .domainUndefine = qemudDomainUndefine, /* 0.2.0 */
.domainUndefineFlags = qemuDomainUndefineFlags, /* 0.9.4 */
.domainAttachDevice = qemuDomainAttachDevice, /* 0.4.1 */ .domainAttachDevice = qemuDomainAttachDevice, /* 0.4.1 */
.domainAttachDeviceFlags = qemuDomainAttachDeviceFlags, /* 0.7.7 */ .domainAttachDeviceFlags = qemuDomainAttachDeviceFlags, /* 0.7.7 */
.domainDetachDevice = qemuDomainDetachDevice, /* 0.5.0 */ .domainDetachDevice = qemuDomainDetachDevice, /* 0.5.0 */