On Thu, Jun 16, 2016 at 13:39:39 -0400, John Ferlan wrote:
On 06/15/2016 09:56 AM, Peter Krempa wrote:
> While we need to know the difference between the total memory stored in
> <memory> and the actual size not included in the possible memory modules
> we can't pre-calculate it reliably. This is due to the fact that
> libvirt's XML is copied via formatting and parsing the XML and the
> initial memory size can be reliably calculated only when certain
> conditions are met due to backwards compatibility.
>
> This patch removes the storage of 'initial_memory' and fixes the helpers
> to recalculate the initial memory size all the time from the total
> memory size. This conversion is possible when we also make sure that
> memory hotplug accounts properly for the update of the total memory size
> and thus the helpers for inserting and removing memory devices need to
> be tweaked too.
>
> This fixes a bug where a cold-plug and cold-remove of a memory device
> would increase the size reported in <memory> in the XML by the size of
> the memory device. This would happen as the persistent definition is
> copied before attaching the device and this would lead to the loss of
> data in 'initial_memory'.
>
> Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1344892
> ---
> src/conf/domain_conf.c | 85 +++++++++++++++++++++++++-----------------------
> src/conf/domain_conf.h | 3 --
> src/libvirt_private.syms | 1 -
> src/qemu/qemu_domain.c | 6 ++--
> 4 files changed, 49 insertions(+), 46 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 9504e5f..10e9e8b 100644
[...]
>
> +/**
> + * virDomainMemoryInsert:
> + *
> + * Inserts a memory device definition into the domain definition. This helper
> + * should be used only in hotplug cases as it's blindly modifying the total
> + * memory size.
> + */
A nit:
I note that it's also called during the attach device config path...
While yes hotplug modifies both live & config, a casual reader may
mistake it for hotplug/live only. Maybe it's just me.
No, the statement indeed implies just hotplug. I'll modify it to
hot/cold-plug to be clear.
[...]
Interesting that on the AttachDevice side there is a corollary, but
the
Detach device side this code does it. Whether that's a different
inconsistency or problem is your call...
This is actually a valid concern. The handling of updating of the
current size is still broken to some extent. I plan to address it
separately though since it has semantic implications in the qemu driver.
ACK w/ the function comments changed. Your call on this balloon
modification - it's just something I noted...
Thanks! Fixed && pushed.
John