Move the "credit expired" loop exit to the middle of the loop,
immediately after "return true". This way having reached the goal on the
last iteration would be reported as success to the caller, rather than
as "timed out".
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/tools/xl/xl_vmcontrol.c
+++ b/tools/xl/xl_vmcontrol.c
@@ -332,7 +332,7 @@ static bool freemem(uint32_t domid, libx
if (rc < 0)
return false;
- do {
+ for (;;) {
time_t start;
rc = libxl_get_free_memory(ctx, &free_memkb);
@@ -342,6 +342,9 @@ static bool freemem(uint32_t domid, libx
if (free_memkb >= need_memkb)
return true;
+ if (credit <= 0)
+ return false;
+
rc = libxl_set_memory_target(ctx, 0, free_memkb - need_memkb, 1, 0);
if (rc < 0)
return false;
@@ -354,9 +357,7 @@ static bool freemem(uint32_t domid, libx
return false;
credit -= difftime(time(NULL), start);
- } while (credit > 0);
-
- return false;
+ }
}
static void reload_domain_config(uint32_t domid,
On Tue, Jul 12, 2022 at 04:08:12PM +0200, Jan Beulich wrote: > Move the "credit expired" loop exit to the middle of the loop, > immediately after "return true". This way having reached the goal on the > last iteration would be reported as success to the caller, rather than > as "timed out". > > Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com> Thanks, -- Anthony PERARD
© 2016 - 2024 Red Hat, Inc.