[libvirt] [PATCHv2] qemu: Fix issues with maxMemory in qemuDomainSetMemoryFlags()

Peter Krempa pkrempa at redhat.com
Wed Apr 22 07:32:56 UTC 2015


On Wed, Apr 01, 2015 at 11:02:26 +0200, Martin Kletzander wrote:
> On Mon, Mar 30, 2015 at 09:01:37PM +0200, Peter Krempa wrote:
> >From: Luyao Huang <lhuang at redhat.com>
> >
> >qemuDomainSetMemoryFlags() would allow to set the initial memory greater
> >than the <maxMemory> field. While the configuration would not work as
> >memory hotplug requires NUMA to be enabled and the
> >qemuDomainSetMemoryFlags() API does not work on NUMA guests this just
> >fixes a corner case.
> >
> 
> ACK, since it's a corner-case, after release.

Thanks, I've pushed this patch with one tweak ...

> 
> >The fix is still worth though as it allows to induce an invalid
> >configuration and make the VM vanish on libvirt restart.
> >
> >Additionally this tweaks error message to be more accurate.
> >
> >Signed-off-by: Luyao Huang <lhuang at redhat.com>
> >Signed-off-by: Peter Krempa <pkrempa at redhat.com>
> >---
> >Version 2 tweaks the error messages to be (possibly) more descriptive.
> >
> > src/qemu/qemu_driver.c | 10 +++++++++-
> > 1 file changed, 9 insertions(+), 1 deletion(-)
> >
> >diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> >index 6700fc9..d15931c 100644
> >--- a/src/qemu/qemu_driver.c
> >+++ b/src/qemu/qemu_driver.c
> >@@ -2319,11 +2319,19 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,
> >              * is no way to change the individual node sizes with this API */
> >             if (virDomainNumaGetNodeCount(persistentDef->numa) > 0) {
> >                 virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> >-                               _("maximum memory size of a domain with NUMA "
> >+                               _("initial memory size of a domain with NUMA "
> >                                  "nodes cannot be modified with this API"));
> >                 goto endjob;
> >             }
> >
> >+            if (persistentDef->mem.max_memory &&
> >+                persistentDef->mem.max_memory < newmem) {
> >+                virReportError(VIR_ERR_OPERATION_INVALID, "%s",
> >+                               _("cannot set initial memory size biger than "

s/biger/greater/

> >+                                 "the maximum memory size"));
> >+                goto endjob;
> >+            }
> >+
> >             virDomainDefSetMemoryInitial(persistentDef, newmem);
> >
> >             if (persistentDef->mem.cur_balloon > newmem)

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150422/baea4b64/attachment-0001.sig>


More information about the libvir-list mailing list