In lxc, we could not use setmem command
with --config options.
This patch will add support for this.
Signed-off-by: Chen Hanxiao chenhanx...@cn.fujitsu.com
---
v2: use virDomainSetMemoryFlagsEnsureACL
remove redundant domain running check
src/lxc/lxc_driver.c | 48 +---
1 file changed, 37 insertions(+), 11 deletions(-)
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index b47ac5e..93f496b 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -711,18 +711,33 @@ static int lxcDomainSetMaxMemory(virDomainPtr dom,
unsigned long newmax)
return ret;
}
-static int lxcDomainSetMemory(virDomainPtr dom, unsigned long newmem)
+static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,
+ unsigned int flags)
{
virDomainObjPtr vm;
+virDomainDefPtr persistentDef = NULL;
+virCapsPtr caps = NULL;
int ret = -1;
virLXCDomainObjPrivatePtr priv;
+virLXCDriverPtr driver = dom-conn-privateData;
+virLXCDriverConfigPtr cfg = NULL;
+
+virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+ VIR_DOMAIN_AFFECT_CONFIG, -1);
if (!(vm = lxcDomObjFromDomain(dom)))
goto cleanup;
priv = vm-privateData;
-if (virDomainSetMemoryEnsureACL(dom-conn, vm-def) 0)
+if (virDomainSetMemoryFlagsEnsureACL(dom-conn, vm-def, flags) 0)
+goto cleanup;
+
+if (!(caps = virLXCDriverGetCapabilities(driver, false)))
+goto cleanup;
+
+if (virDomainLiveConfigHelperMethod(caps, driver-xmlopt, vm, flags,
+persistentDef) 0)
goto cleanup;
if (newmem vm-def-mem.max_balloon) {
@@ -731,16 +746,19 @@ static int lxcDomainSetMemory(virDomainPtr dom, unsigned
long newmem)
goto cleanup;
}
-if (!virDomainObjIsActive(vm)) {
-virReportError(VIR_ERR_OPERATION_INVALID,
- %s, _(Domain is not running));
-goto cleanup;
-}
+ if (flags VIR_DOMAIN_AFFECT_CONFIG) {
+ cfg = virLXCDriverGetConfig(driver);
+ persistentDef-mem.cur_balloon = newmem;
+ if (virDomainSaveConfig(cfg-configDir, persistentDef) 0)
+ goto cleanup;
+ }
-if (virCgroupSetMemory(priv-cgroup, newmem) 0) {
-virReportError(VIR_ERR_OPERATION_FAILED,
- %s, _(Failed to set memory for domain));
-goto cleanup;
+if (flags VIR_DOMAIN_AFFECT_LIVE) {
+if (virCgroupSetMemory(priv-cgroup, newmem) 0) {
+virReportError(VIR_ERR_OPERATION_FAILED,
+ %s, _(Failed to set memory for domain));
+goto cleanup;
+}
}
ret = 0;
@@ -748,9 +766,16 @@ static int lxcDomainSetMemory(virDomainPtr dom, unsigned
long newmem)
cleanup:
if (vm)
virObjectUnlock(vm);
+virObjectUnref(caps);
+virObjectUnref(cfg);
return ret;
}
+static int lxcDomainSetMemory(virDomainPtr dom, unsigned long newmem)
+{
+return lxcDomainSetMemoryFlags(dom, newmem, VIR_DOMAIN_AFFECT_LIVE);
+}
+
static int
lxcDomainSetMemoryParameters(virDomainPtr dom,
virTypedParameterPtr params,
@@ -5697,6 +5722,7 @@ static virDriver lxcDriver = {
.domainGetMaxMemory = lxcDomainGetMaxMemory, /* 0.7.2 */
.domainSetMaxMemory = lxcDomainSetMaxMemory, /* 0.7.2 */
.domainSetMemory = lxcDomainSetMemory, /* 0.7.2 */
+.domainSetMemoryFlags = lxcDomainSetMemoryFlags, /* 1.2.7 */
.domainSetMemoryParameters = lxcDomainSetMemoryParameters, /* 0.8.5 */
.domainGetMemoryParameters = lxcDomainGetMemoryParameters, /* 0.8.5 */
.domainSetBlkioParameters = lxcDomainSetBlkioParameters, /* 0.9.8 */
--
1.9.0
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list