All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Cody <jcody@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, kwolf@redhat.com,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Max Reitz <mreitz@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 4/9] block/commit: utilize job_exit shim
Date: Fri, 31 Aug 2018 09:58:25 -0400	[thread overview]
Message-ID: <20180831135825.GF415265@localhost.localdomain> (raw)
In-Reply-To: <20180830015734.19765-5-jsnow@redhat.com>

On Wed, Aug 29, 2018 at 09:57:29PM -0400, John Snow wrote:
> Change the manual deferment to commit_complete into the implicit
> callback to job_exit, renaming commit_complete to commit_exit.
> 
> This conversion does change the timing of when job_completed is
> called to after the bdrv_replace_node and bdrv_unref calls, which
> could have implications for bjob->blk which will now be put down
> after this cleanup.
> 
> Kevin highlights that we did not take any permissions for that backend
> at job creation time, so it is safe to reorder these operations.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> Reviewed-by: Max Reitz <mreitz@redhat.com>
> ---
>  block/commit.c | 22 +++++-----------------
>  1 file changed, 5 insertions(+), 17 deletions(-)
> 
> diff --git a/block/commit.c b/block/commit.c
> index 4a17bb73ec..da69165de3 100644
> --- a/block/commit.c
> +++ b/block/commit.c
> @@ -68,19 +68,13 @@ static int coroutine_fn commit_populate(BlockBackend *bs, BlockBackend *base,
>      return 0;
>  }
>  
> -typedef struct {
> -    int ret;
> -} CommitCompleteData;
> -
> -static void commit_complete(Job *job, void *opaque)
> +static void commit_exit(Job *job)
>  {
>      CommitBlockJob *s = container_of(job, CommitBlockJob, common.job);
>      BlockJob *bjob = &s->common;
> -    CommitCompleteData *data = opaque;
>      BlockDriverState *top = blk_bs(s->top);
>      BlockDriverState *base = blk_bs(s->base);
>      BlockDriverState *commit_top_bs = s->commit_top_bs;
> -    int ret = data->ret;
>      bool remove_commit_top_bs = false;
>  
>      /* Make sure commit_top_bs and top stay around until bdrv_replace_node() */
> @@ -91,10 +85,10 @@ static void commit_complete(Job *job, void *opaque)
>       * the normal backing chain can be restored. */
>      blk_unref(s->base);
>  
> -    if (!job_is_cancelled(job) && ret == 0) {
> +    if (!job_is_cancelled(job) && job->ret == 0) {
>          /* success */
> -        ret = bdrv_drop_intermediate(s->commit_top_bs, base,
> -                                     s->backing_file_str);
> +        job->ret = bdrv_drop_intermediate(s->commit_top_bs, base,
> +                                          s->backing_file_str);
>      } else {
>          /* XXX Can (or should) we somehow keep 'consistent read' blocked even
>           * after the failed/cancelled commit job is gone? If we already wrote
> @@ -117,9 +111,6 @@ static void commit_complete(Job *job, void *opaque)
>       * bdrv_set_backing_hd() to fail. */
>      block_job_remove_all_bdrv(bjob);
>  
> -    job_completed(job, ret);
> -    g_free(data);
> -

Not having to allocate, track, and free this cumbersome return value for
each of these job specific completions now is pretty nice.

Reviewed-by: Jeff Cody <jcody@redhat.com>


>      /* If bdrv_drop_intermediate() didn't already do that, remove the commit
>       * filter driver from the backing chain. Do this as the final step so that
>       * the 'consistent read' permission can be granted.  */
> @@ -137,7 +128,6 @@ static void commit_complete(Job *job, void *opaque)
>  static int coroutine_fn commit_run(Job *job, Error **errp)
>  {
>      CommitBlockJob *s = container_of(job, CommitBlockJob, common.job);
> -    CommitCompleteData *data;
>      int64_t offset;
>      uint64_t delay_ns = 0;
>      int ret = 0;
> @@ -210,9 +200,6 @@ static int coroutine_fn commit_run(Job *job, Error **errp)
>  out:
>      qemu_vfree(buf);
>  
> -    data = g_malloc(sizeof(*data));
> -    data->ret = ret;
> -    job_defer_to_main_loop(&s->common.job, commit_complete, data);
>      return ret;
>  }
>  
> @@ -224,6 +211,7 @@ static const BlockJobDriver commit_job_driver = {
>          .user_resume   = block_job_user_resume,
>          .drain         = block_job_drain,
>          .run           = commit_run,
> +        .exit          = commit_exit,
>      },
>  };
>  
> -- 
> 2.14.4
> 

  reply	other threads:[~2018-08-31 13:58 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-30  1:57 [Qemu-devel] [PATCH v3 0/9] jobs: Job Exit Refactoring Pt 1 John Snow
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 1/9] jobs: change start callback to run callback John Snow
2018-08-31 13:27   ` Jeff Cody
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 2/9] jobs: canonize Error object John Snow
2018-08-30 19:58   ` Eric Blake
2018-08-31  6:08     ` Markus Armbruster
2018-08-31 15:23       ` John Snow
2018-09-01  7:54         ` Markus Armbruster
2018-09-03 12:22           ` Kevin Wolf
2018-09-03 14:11             ` Markus Armbruster
2018-09-04 16:09               ` John Snow
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 3/9] jobs: add exit shim John Snow
2018-08-31 13:48   ` Jeff Cody
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 4/9] block/commit: utilize job_exit shim John Snow
2018-08-31 13:58   ` Jeff Cody [this message]
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 5/9] block/mirror: " John Snow
2018-08-31 13:23   ` Max Reitz
2018-08-31 14:09   ` Jeff Cody
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 6/9] jobs: " John Snow
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 7/9] block/backup: make function variables consistently named John Snow
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 8/9] jobs: remove ret argument to job_completed; privatize it John Snow
2018-08-31 13:25   ` Max Reitz
2018-08-30  1:57 ` [Qemu-devel] [PATCH v3 9/9] jobs: remove job_defer_to_main_loop John Snow
2018-08-31 14:12 ` [Qemu-devel] [PATCH v3 0/9] jobs: Job Exit Refactoring Pt 1 Max Reitz

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=20180831135825.GF415265@localhost.localdomain \
    --to=jcody@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.