mirror of https://gitee.com/openkylin/libvirt.git
libxl: Set auto-allocated graphics ports to used on reconnect
The libxl driver reconnects to all running VMs when libvirtd is restarted, but it failed to mark auto-allocated graphics ports as set in the port allocator. If many VMs are running that use port auto-allocation and libvirtd is restarted, the port allocator is likely to hand out a port already in use when a new VM is created that uses auto-allocation. VM creation will fail due to the port clash. When reconnecting to running VMs after a libvirtd restart, let the port allocator know about previously allocated ports. Signed-off-by: Jim Fehlig <jfehlig@suse.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
a7743c6026
commit
e0241f334d
|
@ -393,6 +393,7 @@ libxlReconnectDomain(virDomainObj *vm,
|
||||||
virHostdevManager *hostdev_mgr = driver->hostdevMgr;
|
virHostdevManager *hostdev_mgr = driver->hostdevMgr;
|
||||||
unsigned int hostdev_flags = VIR_HOSTDEV_SP_PCI;
|
unsigned int hostdev_flags = VIR_HOSTDEV_SP_PCI;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
hostdev_flags |= VIR_HOSTDEV_SP_USB;
|
hostdev_flags |= VIR_HOSTDEV_SP_USB;
|
||||||
|
|
||||||
|
@ -447,6 +448,28 @@ libxlReconnectDomain(virDomainObj *vm,
|
||||||
|
|
||||||
libxlReconnectNotifyNets(vm->def);
|
libxlReconnectNotifyNets(vm->def);
|
||||||
|
|
||||||
|
/* Set any auto-allocated graphics ports to used */
|
||||||
|
for (i = 0; i < vm->def->ngraphics; i++) {
|
||||||
|
virDomainGraphicsDef *graphics = vm->def->graphics[i];
|
||||||
|
|
||||||
|
switch (graphics->type) {
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
|
||||||
|
if (graphics->data.vnc.autoport)
|
||||||
|
virPortAllocatorSetUsed(graphics->data.vnc.port);
|
||||||
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
||||||
|
if (graphics->data.spice.autoport)
|
||||||
|
virPortAllocatorSetUsed(graphics->data.spice.port);
|
||||||
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0)
|
if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0)
|
||||||
VIR_WARN("Cannot update XML for running Xen guest %s", vm->def->name);
|
VIR_WARN("Cannot update XML for running Xen guest %s", vm->def->name);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue