qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org, lvivier@redhat.com, peterx@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 08/10] migration: No need to return the size of the cache
Date: Tue, 24 Oct 2017 10:28:50 +0100	[thread overview]
Message-ID: <20171024092850.GA2387@work-vm> (raw)
In-Reply-To: <87wp3l98x5.fsf@secure.laptop>

* Juan Quintela (quintela@redhat.com) wrote:
> "Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> > * Juan Quintela (quintela@redhat.com) wrote:
> >> After the previous commits, we make sure that the value passed is
> >> right, or we just drop an error.  So now we return if there is one
> >> error or we have setup correctly the value passed.
> >> 
> >> Signed-off-by: Juan Quintela <quintela@redhat.com>
> >> ---
> >>  migration/migration.c | 6 ++----
> >>  migration/ram.c       | 8 +++-----
> >>  migration/ram.h       | 2 +-
> >>  3 files changed, 6 insertions(+), 10 deletions(-)
> >> 
> >> diff --git a/migration/migration.c b/migration/migration.c
> >> index 3feffb5e26..f3d4503ce2 100644
> >> --- a/migration/migration.c
> >> +++ b/migration/migration.c
> >> @@ -1371,14 +1371,12 @@ void qmp_migrate_cancel(Error **errp)
> >>  void qmp_migrate_set_cache_size(int64_t value, Error **errp)
> >>  {
> >>      MigrationState *s = migrate_get_current();
> >> -    int64_t new_size;
> >>  
> >> -    new_size = xbzrle_cache_resize(value, errp);
> >> -    if (new_size < 0) {
> >> +    if (xbzrle_cache_resize(value, errp) < 0) {
> >
> > That's not consistent with the function below; it returns
> > '0 or negative' for error; this check only tests for negative
> > as an error.
> 
> int xbzrle_cache_resize(int64_t new_size, Error **errp)
> {
>     PageCache *new_cache;
>     int64_t ret = 0;
> 
>     /* Check for truncation */
>     if (new_size != (size_t)new_size) {
>         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
>                    "exceeding address space");
>         return -1;
>     }
> 
>     if (new_size == migrate_xbzrle_cache_size()) {
>         /* nothing to do */
>         return new_size;
>     }
> 
>     XBZRLE_cache_lock();
> 
>     if (XBZRLE.cache != NULL) {
>         new_cache = cache_init(new_size, TARGET_PAGE_SIZE, errp);
>         if (!new_cache) {
>             ret = -1;
>             goto out;
>         }
> 
>         cache_fini(XBZRLE.cache);
>         XBZRLE.cache = new_cache;
>     }
> out:
>     XBZRLE_cache_unlock();
>     return ret;
> }
> 
> 
> That is the function that we end having.
> -1 means error
> 0 means success (yes, I should have changed the return new_size to
> return 0).
> 
> I *think* it is ok.  Notice that this is after we have changed all users
> to know that it returns an error or set the value that it has been
> passed.

There's two problems with that function (as shown):
  a) The comment (which isn't shown) is:
       + * Returns the 0 or negative in case of error.

     so the comment says 0 means error which doesn't match your check

  b) In the case of XBZRLE.cache == NULL; you end up returning 0 - that
  feels like an error?

Dave

> Later, Juan.
> 
> 
> >
> > Dave
> >
> >>          return;
> >>      }
> >>  
> >> -    s->xbzrle_cache_size = new_size;
> >> +    s->xbzrle_cache_size = value;
> >>  }
> >>  
> >>  int64_t qmp_query_migrate_cache_size(Error **errp)
> >> diff --git a/migration/ram.c b/migration/ram.c
> >> index c84f22d759..ed4d3c6295 100644
> >> --- a/migration/ram.c
> >> +++ b/migration/ram.c
> >> @@ -111,15 +111,15 @@ static void XBZRLE_cache_unlock(void)
> >>   * migration may be using the cache and might finish during this call,
> >>   * hence changes to the cache are protected by XBZRLE.lock().
> >>   *
> >> - * Returns the new_size or negative in case of error.
> >> + * Returns the 0 or negative in case of error.
> >>   *
> >>   * @new_size: new cache size
> >>   * @errp: set *errp if the check failed, with reason
> >>   */
> >> -int64_t xbzrle_cache_resize(int64_t new_size, Error **errp)
> >> +int xbzrle_cache_resize(int64_t new_size, Error **errp)
> >>  {
> >>      PageCache *new_cache;
> >> -    int64_t ret;
> >> +    int64_t ret = 0;
> >>  
> >>      /* Check for truncation */
> >>      if (new_size != (size_t)new_size) {
> >> @@ -152,8 +152,6 @@ int64_t xbzrle_cache_resize(int64_t new_size, Error **errp)
> >>          cache_fini(XBZRLE.cache);
> >>          XBZRLE.cache = new_cache;
> >>      }
> >> -
> >> -    ret = new_size;
> >>  out:
> >>      XBZRLE_cache_unlock();
> >>      return ret;
> >> diff --git a/migration/ram.h b/migration/ram.h
> >> index 511b3dc582..c8ae382b5b 100644
> >> --- a/migration/ram.h
> >> +++ b/migration/ram.h
> >> @@ -35,7 +35,7 @@
> >>  extern MigrationStats ram_counters;
> >>  extern XBZRLECacheStats xbzrle_counters;
> >>  
> >> -int64_t xbzrle_cache_resize(int64_t new_size, Error **errp);
> >> +int xbzrle_cache_resize(int64_t new_size, Error **errp);
> >>  uint64_t ram_bytes_remaining(void);
> >>  uint64_t ram_bytes_total(void);
> >>  
> >> -- 
> >> 2.13.6
> >> 
> > --
> > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

  reply	other threads:[~2017-10-24  9:29 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-18 10:36 [Qemu-devel] [PATCH v2 00/10] Make xbzrle_cache_size a migration parameter Juan Quintela
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 01/10] migration: Fix migrate_test_apply for multifd parameters Juan Quintela
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 02/10] migratiom: Remove max_item_age parameter Juan Quintela
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 03/10] migration: Make cache size elements use the right types Juan Quintela
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 04/10] migration: Move xbzrle cache resize error handling to xbzrle_cache_resize Juan Quintela
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 05/10] migration: Make cache_init() take an error parameter Juan Quintela
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 06/10] migration: Make sure that we pass the right cache size Juan Quintela
2017-10-23 14:17   ` Dr. David Alan Gilbert
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 07/10] migration: Don't play games with the requested " Juan Quintela
2017-10-23 14:27   ` Dr. David Alan Gilbert
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 08/10] migration: No need to return the size of the cache Juan Quintela
2017-10-23 14:32   ` Dr. David Alan Gilbert
2017-10-23 15:32     ` Juan Quintela
2017-10-24  9:28       ` Dr. David Alan Gilbert [this message]
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 09/10] migration: Make xbzrle_cache_size a migration parameter Juan Quintela
2017-10-23 15:03   ` Dr. David Alan Gilbert
2017-10-18 10:36 ` [Qemu-devel] [PATCH v2 10/10] migration: [RFC] Use proper types in json Juan Quintela

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171024092850.GA2387@work-vm \
    --to=dgilbert@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).