diff mbox

[09/10] libxl: Fix libxl_set_memory_target return value

Message ID 1459514413-18682-10-git-send-email-paulinaszubarczyk@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Paulina Szubarczyk April 1, 2016, 12:40 p.m. UTC
libxl_set_memory_target seems to have the following return values:

* 1 on failure, if the failure happens because of a xenstore error *or*
* invalid
target

* -1 if the setmaxmem hypercall

* -errno if the set_pod_target hypercall target fails

* 0 on success

Make it consistently return ERROR_FAIL on failure, unless the
parameters were invalid, in which case return ERROR_INVAL.

In accordance with CODING_SYTLE:

1. Leave rc uninitialized, and set when an error is detected

2. Use 'r' for return values to functions whose return values are a
different error space (like xc_domain_setmaxmem and
xc_domain_set_pod_target), or where a failure means retry, rather than
fail the whole function (libxl__fill_dom0_memory_info), to reduce the
risk that

Signed-off-by: George Dunlap <George.Dunlap@eu.citrix.com>
---
 tools/libxl/libxl.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

Comments

Roger Pau Monné April 1, 2016, 2:55 p.m. UTC | #1
On Fri, 1 Apr 2016, Paulina Szubarczyk wrote:
> libxl_set_memory_target seems to have the following return values:
> 
> * 1 on failure, if the failure happens because of a xenstore error *or*
> * invalid
> target

AFAICT it seems like you haven't touched this patch at all, but the commit 
message looks messed up (at least there's an extra "\n" here).

Also, I'm not a git expert, but I think if the patch is from George, and 
you haven't touched it, it should contain an extra "From:" field in 
the message body with George's address.

Roger.
George Dunlap April 4, 2016, 11:40 a.m. UTC | #2
On 01/04/16 15:55, Roger Pau Monné wrote:
> On Fri, 1 Apr 2016, Paulina Szubarczyk wrote:
>> libxl_set_memory_target seems to have the following return values:
>>
>> * 1 on failure, if the failure happens because of a xenstore error *or*
>> * invalid
>> target
> 
> AFAICT it seems like you haven't touched this patch at all, but the commit 
> message looks messed up (at least there's an extra "\n" here).
> 
> Also, I'm not a git expert, but I think if the patch is from George, and 
> you haven't touched it, it should contain an extra "From:" field in 
> the message body with George's address.

I'm not sure the "From" thing is really worth a re-send, but since she's
re-sending it anyway, you might as well. :-)

 -George
Paulina Szubarczyk April 6, 2016, 10:33 a.m. UTC | #3
On 4 April 2016 at 12:40, George Dunlap <george.dunlap@citrix.com> wrote:
>
> On 01/04/16 15:55, Roger Pau Monné wrote:
> > On Fri, 1 Apr 2016, Paulina Szubarczyk wrote:
> >> libxl_set_memory_target seems to have the following return values:
> >>
> >> * 1 on failure, if the failure happens because of a xenstore error *or*
> >> * invalid
> >> target
> >
> > AFAICT it seems like you haven't touched this patch at all, but the commit
> > message looks messed up (at least there's an extra "\n" here).
> >
> > Also, I'm not a git expert, but I think if the patch is from George, and
> > you haven't touched it, it should contain an extra "From:" field in
> > the message body with George's address.
>
> I'm not sure the "From" thing is really worth a re-send, but since she's
> re-sending it anyway, you might as well. :-)
>
>  -George

I have found the previous thread concerning this patch
(http://lists.xenproject.org/archives/html/xen-devel/2016-01/msg00333.html)
where Ian asked for a change from 'r' to 'lrc' as a return value of
libxl__fill_dom0_memory_info, so I will modify it before resend.

There is also proposition of improvement of the modified function but maybe
it will be better to make the changes in different path.

Paulina
diff mbox

Patch

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index ac4d1f6..6bb2f82 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -4693,7 +4693,7 @@  int libxl_set_memory_target(libxl_ctx *ctx, uint32_t domid,
         int32_t target_memkb, int relative, int enforce)
 {
     GC_INIT(ctx);
-    int rc = 1, abort_transaction = 0;
+    int rc, r, abort_transaction = 0;
     uint64_t memorykb;
     uint32_t videoram = 0;
     uint32_t current_target_memkb = 0, new_target_memkb = 0;
@@ -4721,15 +4721,15 @@  retry_transaction:
     if (!target && !domid) {
         if (!xs_transaction_end(ctx->xsh, t, 1))
             goto out_no_transaction;
-        rc = libxl__fill_dom0_memory_info(gc, &current_target_memkb,
+        r = libxl__fill_dom0_memory_info(gc, &current_target_memkb,
                                           &current_max_memkb);
-        if (rc < 0)
-            goto out_no_transaction;
+        if (r < 0) { rc = ERROR_FAIL; goto out_no_transaction; }
         goto retry_transaction;
     } else if (!target) {
         LOGE(ERROR, "cannot get target memory info from %s/memory/target",
              dompath);
         abort_transaction = 1;
+        rc = ERROR_FAIL;
         goto out;
     } else {
         current_target_memkb = strtoul(target, &endptr, 10);
@@ -4737,6 +4737,7 @@  retry_transaction:
             LOGE(ERROR, "invalid memory target %s from %s/memory/target\n",
                  target, dompath);
             abort_transaction = 1;
+            rc = ERROR_FAIL;
             goto out;
         }
     }
@@ -4745,6 +4746,7 @@  retry_transaction:
         LOGE(ERROR, "cannot get memory info from %s/memory/static-max",
              dompath);
         abort_transaction = 1;
+        rc = ERROR_FAIL;
         goto out;
     }
     memorykb = strtoul(memmax, &endptr, 10);
@@ -4752,6 +4754,7 @@  retry_transaction:
         LOGE(ERROR, "invalid max memory %s from %s/memory/static-max\n",
              memmax, dompath);
         abort_transaction = 1;
+        rc = ERROR_FAIL;
         goto out;
     }
 
@@ -4771,6 +4774,7 @@  retry_transaction:
             "memory_dynamic_max must be less than or equal to"
             " memory_static_max\n");
         abort_transaction = 1;
+        rc = ERROR_INVAL;
         goto out;
     }
 
@@ -4778,33 +4782,36 @@  retry_transaction:
         LOG(ERROR, "new target %d for dom0 is below the minimum threshold",
             new_target_memkb);
         abort_transaction = 1;
+        rc = ERROR_INVAL;
         goto out;
     }
 
     if (enforce) {
         memorykb = new_target_memkb + videoram;
-        rc = xc_domain_setmaxmem(ctx->xch, domid, memorykb +
+        r = xc_domain_setmaxmem(ctx->xch, domid, memorykb +
                 LIBXL_MAXMEM_CONSTANT);
-        if (rc != 0) {
+        if (r != 0) {
             LOGE(ERROR,
                  "xc_domain_setmaxmem domid=%u memkb=%"PRIu64" failed ""rc=%d\n",
                  domid,
                  memorykb + LIBXL_MAXMEM_CONSTANT,
-                 rc);
+                 r);
             abort_transaction = 1;
+            rc = ERROR_FAIL;
             goto out;
         }
     }
 
-    rc = xc_domain_set_pod_target(ctx->xch, domid,
+    r = xc_domain_set_pod_target(ctx->xch, domid,
             (new_target_memkb + LIBXL_MAXMEM_CONSTANT) / 4, NULL, NULL, NULL);
-    if (rc != 0) {
+    if (r != 0) {
         LOGE(ERROR,
              "xc_domain_set_pod_target domid=%d, memkb=%d ""failed rc=%d\n",
              domid,
              new_target_memkb / 4,
-             rc);
+             r);
         abort_transaction = 1;
+        rc = ERROR_FAIL;
         goto out;
     }
 
@@ -4818,6 +4825,7 @@  retry_transaction:
                      "%"PRIu32, new_target_memkb / 1024);
     libxl_dominfo_dispose(&ptr);
 
+    rc = 0;
 out:
     if (!xs_transaction_end(ctx->xsh, t, abort_transaction)
         && !abort_transaction)