forked from pool/libvirt
273 lines
12 KiB
Diff
273 lines
12 KiB
Diff
|
commit 0e0c1a7489a6a04c5060d0fe7fad6337ed98ec01
|
||
|
Author: Stefan Bader <stefan.bader@canonical.com>
|
||
|
Date: Thu Mar 27 17:55:02 2014 +0100
|
||
|
|
||
|
libxl: Use id from virDomainObj inside the driver
|
||
|
|
||
|
There is a domain id in the virDomain structure as well as in the
|
||
|
virDomainObj structure. While the former can become stale the latter
|
||
|
is kept up to date. So it is safer to always (virDomainObjPtr)->def->id
|
||
|
internally.
|
||
|
|
||
|
This will fix issues seen when managing Xen guests through libvirt from
|
||
|
virt-manager (not being able to get domain info after define or reboot).
|
||
|
This was caused both though libxlDomainGetInfo() only but there were
|
||
|
a lot of places that might potentially cause issues, too.
|
||
|
|
||
|
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
|
||
|
|
||
|
Index: libvirt-1.2.3/src/libxl/libxl_driver.c
|
||
|
===================================================================
|
||
|
--- libvirt-1.2.3.orig/src/libxl/libxl_driver.c
|
||
|
+++ libvirt-1.2.3/src/libxl/libxl_driver.c
|
||
|
@@ -770,10 +770,10 @@ libxlDomainSuspend(virDomainPtr dom)
|
||
|
priv = vm->privateData;
|
||
|
|
||
|
if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_PAUSED) {
|
||
|
- if (libxl_domain_pause(priv->ctx, dom->id) != 0) {
|
||
|
+ if (libxl_domain_pause(priv->ctx, vm->def->id) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to suspend domain '%d' with libxenlight"),
|
||
|
- dom->id);
|
||
|
+ vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
|
||
|
@@ -829,10 +829,10 @@ libxlDomainResume(virDomainPtr dom)
|
||
|
priv = vm->privateData;
|
||
|
|
||
|
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
|
||
|
- if (libxl_domain_unpause(priv->ctx, dom->id) != 0) {
|
||
|
+ if (libxl_domain_unpause(priv->ctx, vm->def->id) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to resume domain '%d' with libxenlight"),
|
||
|
- dom->id);
|
||
|
+ vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
|
||
|
@@ -883,10 +883,10 @@ libxlDomainShutdownFlags(virDomainPtr do
|
||
|
}
|
||
|
|
||
|
priv = vm->privateData;
|
||
|
- if (libxl_domain_shutdown(priv->ctx, dom->id) != 0) {
|
||
|
+ if (libxl_domain_shutdown(priv->ctx, vm->def->id) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to shutdown domain '%d' with libxenlight"),
|
||
|
- dom->id);
|
||
|
+ vm->def->id);
|
||
|
goto cleanup;
|
||
|
}
|
||
|
|
||
|
@@ -930,10 +930,10 @@ libxlDomainReboot(virDomainPtr dom, unsi
|
||
|
}
|
||
|
|
||
|
priv = vm->privateData;
|
||
|
- if (libxl_domain_reboot(priv->ctx, dom->id) != 0) {
|
||
|
+ if (libxl_domain_reboot(priv->ctx, vm->def->id) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to reboot domain '%d' with libxenlight"),
|
||
|
- dom->id);
|
||
|
+ vm->def->id);
|
||
|
goto cleanup;
|
||
|
}
|
||
|
ret = 0;
|
||
|
@@ -974,7 +974,7 @@ libxlDomainDestroyFlags(virDomainPtr dom
|
||
|
priv = vm->privateData;
|
||
|
if (libxl_domain_destroy(priv->ctx, vm->def->id, NULL) < 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
- _("Failed to destroy domain '%d'"), dom->id);
|
||
|
+ _("Failed to destroy domain '%d'"), vm->def->id);
|
||
|
goto cleanup;
|
||
|
}
|
||
|
|
||
|
@@ -1105,10 +1105,10 @@ libxlDomainSetMemoryFlags(virDomainPtr d
|
||
|
|
||
|
if (flags & VIR_DOMAIN_MEM_LIVE) {
|
||
|
priv = vm->privateData;
|
||
|
- if (libxl_domain_setmaxmem(priv->ctx, dom->id, newmem) < 0) {
|
||
|
+ if (libxl_domain_setmaxmem(priv->ctx, vm->def->id, newmem) < 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to set maximum memory for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
}
|
||
|
@@ -1138,13 +1138,13 @@ libxlDomainSetMemoryFlags(virDomainPtr d
|
||
|
priv = vm->privateData;
|
||
|
/* Unlock virDomainObj while ballooning memory */
|
||
|
virObjectUnlock(vm);
|
||
|
- res = libxl_set_memory_target(priv->ctx, dom->id, newmem, 0,
|
||
|
+ res = libxl_set_memory_target(priv->ctx, vm->def->id, newmem, 0,
|
||
|
/* force */ 1);
|
||
|
virObjectLock(vm);
|
||
|
if (res < 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to set memory for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
}
|
||
|
@@ -1202,9 +1202,10 @@ libxlDomainGetInfo(virDomainPtr dom, vir
|
||
|
info->memory = vm->def->mem.cur_balloon;
|
||
|
info->maxMem = vm->def->mem.max_balloon;
|
||
|
} else {
|
||
|
- if (libxl_domain_info(priv->ctx, &d_info, dom->id) != 0) {
|
||
|
+ if (libxl_domain_info(priv->ctx, &d_info, vm->def->id) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
- _("libxl_domain_info failed for domain '%d'"), dom->id);
|
||
|
+ _("libxl_domain_info failed for domain '%d'"),
|
||
|
+ vm->def->id);
|
||
|
goto cleanup;
|
||
|
}
|
||
|
info->cpuTime = d_info.cpu_time;
|
||
|
@@ -1483,11 +1484,11 @@ libxlDomainCoreDump(virDomainPtr dom, co
|
||
|
|
||
|
if (!(flags & VIR_DUMP_LIVE) &&
|
||
|
virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
|
||
|
- if (libxl_domain_pause(priv->ctx, dom->id) != 0) {
|
||
|
+ if (libxl_domain_pause(priv->ctx, vm->def->id) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Before dumping core, failed to suspend domain '%d'"
|
||
|
" with libxenlight"),
|
||
|
- dom->id);
|
||
|
+ vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, VIR_DOMAIN_PAUSED_DUMP);
|
||
|
@@ -1496,20 +1497,20 @@ libxlDomainCoreDump(virDomainPtr dom, co
|
||
|
|
||
|
/* Unlock virDomainObj while dumping core */
|
||
|
virObjectUnlock(vm);
|
||
|
- ret = libxl_domain_core_dump(priv->ctx, dom->id, to, NULL);
|
||
|
+ ret = libxl_domain_core_dump(priv->ctx, vm->def->id, to, NULL);
|
||
|
virObjectLock(vm);
|
||
|
if (ret != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to dump core of domain '%d' with libxenlight"),
|
||
|
- dom->id);
|
||
|
+ vm->def->id);
|
||
|
ret = -1;
|
||
|
goto unpause;
|
||
|
}
|
||
|
|
||
|
if (flags & VIR_DUMP_CRASH) {
|
||
|
- if (libxl_domain_destroy(priv->ctx, dom->id, NULL) < 0) {
|
||
|
+ if (libxl_domain_destroy(priv->ctx, vm->def->id, NULL) < 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
- _("Failed to destroy domain '%d'"), dom->id);
|
||
|
+ _("Failed to destroy domain '%d'"), vm->def->id);
|
||
|
goto unpause;
|
||
|
}
|
||
|
|
||
|
@@ -1524,10 +1525,10 @@ libxlDomainCoreDump(virDomainPtr dom, co
|
||
|
|
||
|
unpause:
|
||
|
if (virDomainObjIsActive(vm) && paused) {
|
||
|
- if (libxl_domain_unpause(priv->ctx, dom->id) != 0) {
|
||
|
+ if (libxl_domain_unpause(priv->ctx, vm->def->id) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("After dumping core, failed to resume domain '%d' with"
|
||
|
- " libxenlight"), dom->id);
|
||
|
+ " libxenlight"), vm->def->id);
|
||
|
} else {
|
||
|
virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
|
||
|
VIR_DOMAIN_RUNNING_UNPAUSED);
|
||
|
@@ -1786,19 +1787,19 @@ libxlDomainSetVcpusFlags(virDomainPtr do
|
||
|
break;
|
||
|
|
||
|
case VIR_DOMAIN_VCPU_LIVE:
|
||
|
- if (libxl_set_vcpuonline(priv->ctx, dom->id, &map) != 0) {
|
||
|
+ if (libxl_set_vcpuonline(priv->ctx, vm->def->id, &map) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to set vcpus for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG:
|
||
|
- if (libxl_set_vcpuonline(priv->ctx, dom->id, &map) != 0) {
|
||
|
+ if (libxl_set_vcpuonline(priv->ctx, vm->def->id, &map) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to set vcpus for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
def->vcpus = nvcpus;
|
||
|
@@ -1934,7 +1935,7 @@ libxlDomainPinVcpuFlags(virDomainPtr dom
|
||
|
libxlDomainObjPrivatePtr priv;
|
||
|
|
||
|
priv = vm->privateData;
|
||
|
- if (libxl_set_vcpuaffinity(priv->ctx, dom->id, vcpu, &map) != 0) {
|
||
|
+ if (libxl_set_vcpuaffinity(priv->ctx, vm->def->id, vcpu, &map) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to pin vcpu '%d' with libxenlight"),
|
||
|
vcpu);
|
||
|
@@ -2099,11 +2100,11 @@ libxlDomainGetVcpus(virDomainPtr dom, vi
|
||
|
}
|
||
|
|
||
|
priv = vm->privateData;
|
||
|
- if ((vcpuinfo = libxl_list_vcpu(priv->ctx, dom->id, &maxcpu,
|
||
|
+ if ((vcpuinfo = libxl_list_vcpu(priv->ctx, vm->def->id, &maxcpu,
|
||
|
&hostcpus)) == NULL) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to list vcpus for domain '%d' with libxenlight"),
|
||
|
- dom->id);
|
||
|
+ vm->def->id);
|
||
|
goto cleanup;
|
||
|
}
|
||
|
|
||
|
@@ -3608,7 +3609,7 @@ libxlDomainGetSchedulerType(virDomainPtr
|
||
|
default:
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to get scheduler id for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto cleanup;
|
||
|
}
|
||
|
|
||
|
@@ -3659,10 +3660,10 @@ libxlDomainGetSchedulerParametersFlags(v
|
||
|
goto cleanup;
|
||
|
}
|
||
|
|
||
|
- if (libxl_domain_sched_params_get(priv->ctx, dom->id, &sc_info) != 0) {
|
||
|
+ if (libxl_domain_sched_params_get(priv->ctx, vm->def->id, &sc_info) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to get scheduler parameters for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto cleanup;
|
||
|
}
|
||
|
|
||
|
@@ -3740,10 +3741,10 @@ libxlDomainSetSchedulerParametersFlags(v
|
||
|
goto endjob;
|
||
|
}
|
||
|
|
||
|
- if (libxl_domain_sched_params_get(priv->ctx, dom->id, &sc_info) != 0) {
|
||
|
+ if (libxl_domain_sched_params_get(priv->ctx, vm->def->id, &sc_info) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to get scheduler parameters for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
|
||
|
@@ -3756,10 +3757,10 @@ libxlDomainSetSchedulerParametersFlags(v
|
||
|
sc_info.cap = params[i].value.ui;
|
||
|
}
|
||
|
|
||
|
- if (libxl_domain_sched_params_set(priv->ctx, dom->id, &sc_info) != 0) {
|
||
|
+ if (libxl_domain_sched_params_set(priv->ctx, vm->def->id, &sc_info) != 0) {
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||
|
_("Failed to set scheduler parameters for domain '%d'"
|
||
|
- " with libxenlight"), dom->id);
|
||
|
+ " with libxenlight"), vm->def->id);
|
||
|
goto endjob;
|
||
|
}
|
||
|
|