Refactor the code to extract an helper method to get the current balloon settings. Signed-off-by: Francesco Romani <fromani@xxxxxxxxxx> --- src/qemu/qemu_driver.c | 98 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 38 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 239a300..bbd16ed 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -168,6 +168,9 @@ static int qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid, const char *path, int oflags, bool *needUnlink, bool *bypassSecurityDriver); +static int qemuDomainGetBalloonMemory(virQEMUDriverPtr driver, + virDomainObjPtr vm, + unsigned long *memory); virQEMUDriverPtr qemu_driver = NULL; @@ -2519,6 +2522,60 @@ static int qemuDomainSendKey(virDomainPtr domain, return ret; } +static int qemuDomainGetBalloonMemory(virQEMUDriverPtr driver, + virDomainObjPtr vm, + unsigned long *memory) +{ + int ret = -1; + int err = 0; + qemuDomainObjPrivatePtr priv = vm->privateData; + + if ((vm->def->memballoon != NULL) && + (vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE)) { + *memory = vm->def->mem.max_balloon; + } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BALLOON_EVENT)) { + *memory = vm->def->mem.cur_balloon; + } else if (qemuDomainJobAllowed(priv, QEMU_JOB_QUERY)) { + unsigned long long balloon; + + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0) + goto cleanup; + if (!virDomainObjIsActive(vm)) + err = 0; + else { + qemuDomainObjEnterMonitor(driver, vm); + err = qemuMonitorGetBalloonInfo(priv->mon, &balloon); + qemuDomainObjExitMonitor(driver, vm); + } + if (!qemuDomainObjEndJob(driver, vm)) { + vm = NULL; + goto cleanup; + } + + if (err < 0) { + /* We couldn't get current memory allocation but that's not + * a show stopper; we wouldn't get it if there was a job + * active either + */ + *memory = vm->def->mem.cur_balloon; + } else if (err == 0) { + /* Balloon not supported, so maxmem is always the allocation */ + *memory = vm->def->mem.max_balloon; + } else { + *memory = balloon; + } + } else { + *memory = vm->def->mem.cur_balloon; + } + + ret = 0; + + cleanup: + if (vm) + virObjectUnlock(vm); + return ret; +} + static int qemuDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info) { @@ -2526,7 +2583,6 @@ static int qemuDomainGetInfo(virDomainPtr dom, virDomainObjPtr vm; int ret = -1; int err; - unsigned long long balloon; if (!(vm = qemuDomObjFromDomain(dom))) goto cleanup; @@ -2549,43 +2605,9 @@ static int qemuDomainGetInfo(virDomainPtr dom, info->maxMem = vm->def->mem.max_balloon; if (virDomainObjIsActive(vm)) { - qemuDomainObjPrivatePtr priv = vm->privateData; - - if ((vm->def->memballoon != NULL) && - (vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE)) { - info->memory = vm->def->mem.max_balloon; - } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BALLOON_EVENT)) { - info->memory = vm->def->mem.cur_balloon; - } else if (qemuDomainJobAllowed(priv, QEMU_JOB_QUERY)) { - if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0) - goto cleanup; - if (!virDomainObjIsActive(vm)) - err = 0; - else { - qemuDomainObjEnterMonitor(driver, vm); - err = qemuMonitorGetBalloonInfo(priv->mon, &balloon); - qemuDomainObjExitMonitor(driver, vm); - } - if (!qemuDomainObjEndJob(driver, vm)) { - vm = NULL; - goto cleanup; - } - - if (err < 0) { - /* We couldn't get current memory allocation but that's not - * a show stopper; we wouldn't get it if there was a job - * active either - */ - info->memory = vm->def->mem.cur_balloon; - } else if (err == 0) { - /* Balloon not supported, so maxmem is always the allocation */ - info->memory = vm->def->mem.max_balloon; - } else { - info->memory = balloon; - } - } else { - info->memory = vm->def->mem.cur_balloon; - } + err = qemuDomainGetBalloonMemory(driver, vm, &info->memory); + if (err) + return err; } else { info->memory = 0; } -- 1.9.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list