qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 for-2.6 4/5] aio-posix: Skip external nodes i


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH v2 for-2.6 4/5] aio-posix: Skip external nodes in aio_dispatch
Date: Fri, 22 Apr 2016 13:38:34 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

Am 22.04.2016 um 12:56 hat Fam Zheng geschrieben:
> 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.
> 
> This could result in a few busy polls because the fd is left unhandled,
> but the drained section is only transient and shouldn't be longer than
> one or two event loop iterations.

Are the busy polls because aio_ctx_check() calls aio_pending(), which
still returns true, even if only disabled AioHandlers are ready? If so,
should we just add the is_external check to aio_pending(), too?

Kevin

> Signed-off-by: Fam Zheng <address@hidden>
> ---
>  aio-posix.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/aio-posix.c b/aio-posix.c
> index 7fd565f..a7c9304 100644
> --- a/aio-posix.c
> +++ b/aio-posix.c
> @@ -323,6 +323,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 +334,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;
> -- 
> 2.8.0
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]