[libvirt] [PATCH] qemu: Set swap_hard_limit before hard_limit

Osier Yang jyang at redhat.com
Thu Jul 12 09:03:52 UTC 2012


Setting hard_limit larger than previous swap_hard_limit must fail,
it's not that good if one wants to change the swap_hard_limit
and hard_limit together. E.g.

% virsh memtune rhel6
hard_limit     : 1000000
soft_limit     : 1000000
swap_hard_limit: 1000000

% virsh memtune rhel6 --hard-limit 1000020 --soft-limit 1000020 \
--swap-hard-limit 1000020 --live

This patch reoder the limits setting to set the swap_hard_limit
first.
---
 src/qemu/qemu_driver.c |   26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index dc04d13..1abdd27 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6625,43 +6625,43 @@ qemuDomainSetMemoryParameters(virDomainPtr dom,
     for (i = 0; i < nparams; i++) {
         virTypedParameterPtr param = &params[i];
 
-        if (STREQ(param->field, VIR_DOMAIN_MEMORY_HARD_LIMIT)) {
+        if (STREQ(param->field, VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT)) {
             if (flags & VIR_DOMAIN_AFFECT_LIVE) {
-                rc = virCgroupSetMemoryHardLimit(group, params[i].value.ul);
+                rc = virCgroupSetMemSwapHardLimit(group, params[i].value.ul);
                 if (rc != 0) {
                     virReportSystemError(-rc, "%s",
-                                         _("unable to set memory hard_limit tunable"));
+                                         _("unable to set swap_hard_limit tunable"));
                     ret = -1;
                 }
             }
-
             if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
-                persistentDef->mem.hard_limit = params[i].value.ul;
+                persistentDef->mem.swap_hard_limit = params[i].value.ul;
             }
-        } else if (STREQ(param->field, VIR_DOMAIN_MEMORY_SOFT_LIMIT)) {
+        } else if (STREQ(param->field, VIR_DOMAIN_MEMORY_HARD_LIMIT)) {
             if (flags & VIR_DOMAIN_AFFECT_LIVE) {
-                rc = virCgroupSetMemorySoftLimit(group, params[i].value.ul);
+                rc = virCgroupSetMemoryHardLimit(group, params[i].value.ul);
                 if (rc != 0) {
                     virReportSystemError(-rc, "%s",
-                                         _("unable to set memory soft_limit tunable"));
+                                         _("unable to set memory hard_limit tunable"));
                     ret = -1;
                 }
             }
 
             if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
-                persistentDef->mem.soft_limit = params[i].value.ul;
+                persistentDef->mem.hard_limit = params[i].value.ul;
             }
-        } else if (STREQ(param->field, VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT)) {
+        } else if (STREQ(param->field, VIR_DOMAIN_MEMORY_SOFT_LIMIT)) {
             if (flags & VIR_DOMAIN_AFFECT_LIVE) {
-                rc = virCgroupSetMemSwapHardLimit(group, params[i].value.ul);
+                rc = virCgroupSetMemorySoftLimit(group, params[i].value.ul);
                 if (rc != 0) {
                     virReportSystemError(-rc, "%s",
-                                         _("unable to set swap_hard_limit tunable"));
+                                         _("unable to set memory soft_limit tunable"));
                     ret = -1;
                 }
             }
+
             if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
-                persistentDef->mem.swap_hard_limit = params[i].value.ul;
+                persistentDef->mem.soft_limit = params[i].value.ul;
             }
         }
     }
-- 
1.7.7.3




More information about the libvir-list mailing list