1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

conf: Always truncate balloon size to maximum memory size

Specifying a balloon size more than the memory size of a guest isn't
something that should be rejected when parsing the XML. Truncate the
size to the maximum memory size.
This commit is contained in:
Peter Krempa 2015-04-30 17:33:41 +02:00
parent 85d8ede9eb
commit fccc2c3313

View File

@ -3366,27 +3366,9 @@ virDomainDefPostParseInternal(virDomainDefPtr def,
return -1; return -1;
} }
if (def->mem.cur_balloon > virDomainDefGetMemoryActual(def)) { if (def->mem.cur_balloon > virDomainDefGetMemoryActual(def) ||
/* Older libvirt could get into this situation due to def->mem.cur_balloon == 0)
* rounding; if the discrepancy is less than 4MiB, we silently
* round down, otherwise we flag the issue. */
if (VIR_DIV_UP(def->mem.cur_balloon, 4096) >
VIR_DIV_UP(virDomainDefGetMemoryActual(def), 4096)) {
virReportError(VIR_ERR_XML_ERROR,
_("current memory '%lluk' exceeds "
"maximum '%lluk'"),
def->mem.cur_balloon,
virDomainDefGetMemoryActual(def));
return -1;
} else {
VIR_DEBUG("Truncating current %lluk to maximum %lluk",
def->mem.cur_balloon,
virDomainDefGetMemoryActual(def));
def->mem.cur_balloon = virDomainDefGetMemoryActual(def); def->mem.cur_balloon = virDomainDefGetMemoryActual(def);
}
} else if (def->mem.cur_balloon == 0) {
def->mem.cur_balloon = virDomainDefGetMemoryActual(def);
}
if ((def->mem.max_memory || def->mem.memory_slots) && if ((def->mem.max_memory || def->mem.memory_slots) &&
!(def->mem.max_memory && def->mem.memory_slots)) { !(def->mem.max_memory && def->mem.memory_slots)) {