From: Paolo Bonzini <pbonzini@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>, qemu-block@nongnu.org
Cc: peter.maydell@linaro.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PULL 4/5] aio-posix: Skip external nodes in aio_dispatch
Date: Mon, 9 May 2016 12:58:05 +0200 [thread overview]
Message-ID: <57306D3D.3070401@redhat.com> (raw)
In-Reply-To: <1461337541-4844-5-git-send-email-kwolf@redhat.com>
On 22/04/2016 17:05, Kevin Wolf wrote:
> From: Fam Zheng <famz@redhat.com>
>
> aio_poll doesn't poll the external nodes so this should never be true,
> but aio_ctx_dispatch may get notified by the events from GSource. To
> make bdrv_drained_begin effective in main loop, we should check the
> is_external flag here too.
>
> Also do the check in aio_pending so aio_dispatch is not called
> superfluously, when there is no events other than external ones.
>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> Reviewed-by: Jeff Cody <jcody@redhat.com>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Are you going to do the aio-win32 version? I'm not sure what's the
state of ioeventfd emulation.
Paolo
> ---
> aio-posix.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/aio-posix.c b/aio-posix.c
> index 7fd565f..6006122 100644
> --- a/aio-posix.c
> +++ b/aio-posix.c
> @@ -282,10 +282,12 @@ bool aio_pending(AioContext *ctx)
> int revents;
>
> revents = node->pfd.revents & node->pfd.events;
> - if (revents & (G_IO_IN | G_IO_HUP | G_IO_ERR) && node->io_read) {
> + if (revents & (G_IO_IN | G_IO_HUP | G_IO_ERR) && node->io_read &&
> + aio_node_check(ctx, node->is_external)) {
> return true;
> }
> - if (revents & (G_IO_OUT | G_IO_ERR) && node->io_write) {
> + if (revents & (G_IO_OUT | G_IO_ERR) && node->io_write &&
> + aio_node_check(ctx, node->is_external)) {
> return true;
> }
> }
> @@ -323,6 +325,7 @@ bool aio_dispatch(AioContext *ctx)
>
> if (!node->deleted &&
> (revents & (G_IO_IN | G_IO_HUP | G_IO_ERR)) &&
> + aio_node_check(ctx, node->is_external) &&
> node->io_read) {
> node->io_read(node->opaque);
>
> @@ -333,6 +336,7 @@ bool aio_dispatch(AioContext *ctx)
> }
> if (!node->deleted &&
> (revents & (G_IO_OUT | G_IO_ERR)) &&
> + aio_node_check(ctx, node->is_external) &&
> node->io_write) {
> node->io_write(node->opaque);
> progress = true;
>
next prev parent reply other threads:[~2016-05-09 10:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-22 15:05 [Qemu-devel] [PULL 0/5] Mirror block job fixes for 2.6.0-rc4 Kevin Wolf
2016-04-22 15:05 ` [Qemu-devel] [PULL 1/5] iohandler: Introduce iohandler_get_aio_context Kevin Wolf
2016-04-22 15:05 ` [Qemu-devel] [PULL 2/5] event-notifier: Add "is_external" parameter Kevin Wolf
2016-04-22 15:05 ` [Qemu-devel] [PULL 3/5] virtio: Mark host notifiers as external Kevin Wolf
2016-04-22 15:05 ` [Qemu-devel] [PULL 4/5] aio-posix: Skip external nodes in aio_dispatch Kevin Wolf
2016-05-09 10:58 ` Paolo Bonzini [this message]
2016-04-22 15:05 ` [Qemu-devel] [PULL 5/5] mirror: Workaround for unexpected iohandler events during completion Kevin Wolf
2016-04-22 15:50 ` [Qemu-devel] [PULL 0/5] Mirror block job fixes for 2.6.0-rc4 Peter Maydell
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=57306D3D.3070401@redhat.com \
--to=pbonzini@redhat.com \
--cc=kwolf@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/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.