On LXC domain startup we have already called virDomainObjSetDefTransient to fill vm->newDef. There is no need to call virDomainLiveConfigHelperMethod which has the ability to fill newDef if it's NULL. --- src/lxc/lxc_driver.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index e854f35..72a144b 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -694,8 +694,7 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, unsigned int flags) { virDomainObjPtr vm; - virDomainDefPtr persistentDef = NULL; - virCapsPtr caps = NULL; + virDomainDefPtr def = NULL, persistentDef = NULL; int ret = -1; virLXCDomainObjPrivatePtr priv; virLXCDriverPtr driver = dom->conn->privateData; @@ -718,22 +717,18 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0) goto cleanup; - if (!(caps = virLXCDriverGetCapabilities(driver, false))) - goto endjob; - - if (virDomainLiveConfigHelperMethod(caps, driver->xmlopt, vm, &flags, - &persistentDef) < 0) + if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0) goto endjob; if (flags & VIR_DOMAIN_MEM_MAXIMUM) { - if (flags & VIR_DOMAIN_AFFECT_LIVE) { + if (def) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("Cannot resize the max memory " "on an active domain")); goto endjob; } - if (flags & VIR_DOMAIN_AFFECT_CONFIG) { + if (persistentDef) { virDomainDefSetMemoryTotal(persistentDef, newmem); if (persistentDef->mem.cur_balloon > newmem) persistentDef->mem.cur_balloon = newmem; @@ -744,9 +739,9 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, } else { unsigned long oldmax = 0; - if (flags & VIR_DOMAIN_AFFECT_LIVE) - oldmax = virDomainDefGetMemoryActual(vm->def); - if (flags & VIR_DOMAIN_AFFECT_CONFIG) { + if (def) + oldmax = virDomainDefGetMemoryActual(def); + if (persistentDef) { if (!oldmax || oldmax > virDomainDefGetMemoryActual(persistentDef)) oldmax = virDomainDefGetMemoryActual(persistentDef); } @@ -757,19 +752,19 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, goto endjob; } - if (flags & VIR_DOMAIN_AFFECT_LIVE) { + if (def) { if (virCgroupSetMemory(priv->cgroup, newmem) < 0) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Failed to set memory for domain")); goto endjob; } - vm->def->mem.cur_balloon = newmem; + def->mem.cur_balloon = newmem; if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver->caps) < 0) goto endjob; } - if (flags & VIR_DOMAIN_AFFECT_CONFIG) { + if (persistentDef) { persistentDef->mem.cur_balloon = newmem; if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) @@ -784,7 +779,6 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, cleanup: virDomainObjEndAPI(&vm); - virObjectUnref(caps); virObjectUnref(cfg); return ret; } -- 2.7.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list