diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2018-09-12 19:10:40 +0200 |
---|---|---|
committer | Fam Zheng <famz@redhat.com> | 2018-09-26 10:46:21 +0800 |
commit | cfeb35d6774b2e936046aa9923217818bd160299 (patch) | |
tree | b5f2b957e68792872d00fd460d8c1876a327d6b8 /util | |
parent | e30cffa04d52e35996569f1cfac111be19576bde (diff) | |
download | qemu-cfeb35d6774b2e936046aa9923217818bd160299.zip qemu-cfeb35d6774b2e936046aa9923217818bd160299.tar.gz qemu-cfeb35d6774b2e936046aa9923217818bd160299.tar.bz2 |
aio-posix: do skip system call if ctx->notifier polling succeeds
Commit 70232b5253 ("aio-posix: Don't count ctx->notifier as progress when
2018-08-15), by not reporting progress, causes aio_poll to execute the
system call when polling succeeds because of ctx->notifier. This introduces
latency before the call to aio_bh_poll() and negates the advantages of
polling, unfortunately.
The fix builds on the previous patch, separating the effect of polling on
the timeout from the progress reported to aio_poll(). ctx->notifier
does zero the timeout, causing the caller to skip the system call,
but it does not report progress, so that the bug fix of commit 70232b5253
still stands.
Fixes: 70232b5253a3c4e03ed1ac47ef9246a8ac66c6fa
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20180912171040.1732-4-pbonzini@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
Diffstat (limited to 'util')
-rw-r--r-- | util/aio-posix.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/util/aio-posix.c b/util/aio-posix.c index c54d1eb..621b302 100644 --- a/util/aio-posix.c +++ b/util/aio-posix.c @@ -498,10 +498,11 @@ static bool run_poll_handlers_once(AioContext *ctx, int64_t *timeout) QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) { if (!node->deleted && node->io_poll && aio_node_check(ctx, node->is_external) && - node->io_poll(node->opaque) && - node->opaque != &ctx->notifier) { + node->io_poll(node->opaque)) { *timeout = 0; - progress = true; + if (node->opaque != &ctx->notifier) { + progress = true; + } } /* Caller handles freeing deleted nodes. Don't do it here. */ |