All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org,
	Kevin Wolf <kwolf@redhat.com>, John Snow <jsnow@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 05/16] block/mirror: Convert to coroutines
Date: Tue, 27 Feb 2018 15:44:13 +0800	[thread overview]
Message-ID: <20180227074413.GB21035@lemon.usersys.redhat.com> (raw)
In-Reply-To: <20180122220806.22154-6-mreitz@redhat.com>

On Mon, 01/22 23:07, Max Reitz wrote:
> @@ -101,7 +105,7 @@ static BlockErrorAction mirror_error_action(MirrorBlockJob *s, bool read,
>      }
>  }
>  
> -static void mirror_iteration_done(MirrorOp *op, int ret)
> +static void coroutine_fn mirror_iteration_done(MirrorOp *op, int ret)
>  {
>      MirrorBlockJob *s = op->s;
>      struct iovec *iov;

I think we want s/qemu_coroutine_enter/aio_co_wake/ in mirror_iteration_done().
As an AIO callback before, this didn't matter, but now we are in an terminating
coroutine, so it is pointless to defer the termination, or even risky in that we
are in a aio_context_acquire/release section, but have already decremented
s->in_flight, which is fishy.

> @@ -138,9 +142,8 @@ static void mirror_iteration_done(MirrorOp *op, int ret)
>      }
>  }
>  
> -static void mirror_write_complete(void *opaque, int ret)
> +static void coroutine_fn mirror_write_complete(MirrorOp *op, int ret)
>  {
> -    MirrorOp *op = opaque;
>      MirrorBlockJob *s = op->s;
>  
>      aio_context_acquire(blk_get_aio_context(s->common.blk));
> @@ -157,9 +160,8 @@ static void mirror_write_complete(void *opaque, int ret)
>      aio_context_release(blk_get_aio_context(s->common.blk));
>  }
>  
> -static void mirror_read_complete(void *opaque, int ret)
> +static void coroutine_fn mirror_read_complete(MirrorOp *op, int ret)
>  {
> -    MirrorOp *op = opaque;
>      MirrorBlockJob *s = op->s;
>  
>      aio_context_acquire(blk_get_aio_context(s->common.blk));
> @@ -174,8 +176,11 @@ static void mirror_read_complete(void *opaque, int ret)
>  
>          mirror_iteration_done(op, ret);
>      } else {
> -        blk_aio_pwritev(s->target, op->offset, &op->qiov,
> -                        0, mirror_write_complete, op);
> +        int ret;

s/ret/ret2/ or drop the definition?
because ret is already the paramter of the function.

> +
> +        ret = blk_co_pwritev(s->target, op->offset,
> +                             op->qiov.size, &op->qiov, 0);
> +        mirror_write_complete(op, ret);
>      }
>      aio_context_release(blk_get_aio_context(s->common.blk));
>  }

<snip>

> +static void coroutine_fn mirror_co_discard(void *opaque)
> +{
> +    MirrorOp *op = opaque;
> +    int ret;
> +
> +    op->s->in_flight++;
> +    op->s->bytes_in_flight += op->bytes;
> +    *op->bytes_handled = op->bytes;
> +
> +    ret = blk_co_pdiscard(op->s->target, op->offset, op->bytes);
> +    mirror_write_complete(op, ret);
>  }
>  
>  static unsigned mirror_perform(MirrorBlockJob *s, int64_t offset,
>                                 unsigned bytes, MirrorMethod mirror_method)

Doesn't mirror_perform need coroutine_fn annotation too?

>  {

Fam

  reply	other threads:[~2018-02-27  7:44 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-22 22:07 [Qemu-devel] [PATCH v2 00/16] block/mirror: Add active-sync mirroring Max Reitz
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 01/16] block: BDS deletion during bdrv_drain_recurse Max Reitz
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 02/16] block: BDS deletion in bdrv_do_drained_begin() Max Reitz
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 03/16] tests: Add bdrv-drain test for node deletion Max Reitz
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 04/16] block/mirror: Pull out mirror_perform() Max Reitz
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 05/16] block/mirror: Convert to coroutines Max Reitz
2018-02-27  7:44   ` Fam Zheng [this message]
2018-02-28 14:13     ` Max Reitz
2018-02-28 17:07       ` Max Reitz
2018-03-01  2:50         ` Fam Zheng
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 06/16] block/mirror: Use CoQueue to wait on in-flight ops Max Reitz
2018-02-27  8:37   ` Fam Zheng
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 07/16] block/mirror: Wait for in-flight op conflicts Max Reitz
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 08/16] block/mirror: Use source as a BdrvChild Max Reitz
2018-01-22 22:07 ` [Qemu-devel] [PATCH v2 09/16] block: Generalize should_update_child() rule Max Reitz
2018-01-22 22:08 ` [Qemu-devel] [PATCH v2 10/16] hbitmap: Add @advance param to hbitmap_iter_next() Max Reitz
2018-02-27  8:59   ` Fam Zheng
2018-02-28 14:28     ` Max Reitz
2018-01-22 22:08 ` [Qemu-devel] [PATCH v2 11/16] block/dirty-bitmap: Add bdrv_dirty_iter_next_area Max Reitz
2018-02-27  9:06   ` Fam Zheng
2018-02-28 14:57     ` Max Reitz
2018-01-22 22:08 ` [Qemu-devel] [PATCH v2 12/16] block/mirror: Distinguish active from passive ops Max Reitz
2018-02-27  9:12   ` Fam Zheng
2018-02-28 15:05     ` Max Reitz
2018-01-22 22:08 ` [Qemu-devel] [PATCH v2 13/16] block/mirror: Add MirrorBDSOpaque Max Reitz
2018-01-22 22:08 ` [Qemu-devel] [PATCH v2 14/16] block/mirror: Add active mirroring Max Reitz
2018-02-27  9:34   ` Fam Zheng
2018-02-27 14:25     ` Eric Blake
2018-02-28 15:06     ` Max Reitz
2018-01-22 22:08 ` [Qemu-devel] [PATCH v2 15/16] block/mirror: Add copy mode QAPI interface Max Reitz
2018-02-27  9:38   ` Fam Zheng
2018-02-28 15:55     ` Max Reitz
2018-01-22 22:08 ` [Qemu-devel] [PATCH v2 16/16] iotests: Add test for active mirroring Max Reitz
2018-02-24 15:42 ` [Qemu-devel] [PATCH v2 00/16] block/mirror: Add active-sync mirroring Max Reitz
2018-02-27  9:51   ` Fam Zheng

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=20180227074413.GB21035@lemon.usersys.redhat.com \
    --to=famz@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.