Blame SOURCES/kvm-aio-posix-do-skip-system-call-if-ctx-notifier-pollin.patch

357786
From 189e720e9fa5536fb22960f158b3b7f91dcccf2c Mon Sep 17 00:00:00 2001
357786
From: Fam Zheng <famz@redhat.com>
357786
Date: Tue, 18 Sep 2018 09:07:14 +0200
357786
Subject: [PATCH 3/3] aio-posix: do skip system call if ctx->notifier polling
357786
 succeeds
357786
357786
RH-Author: Fam Zheng <famz@redhat.com>
357786
Message-id: <20180918090714.18069-4-famz@redhat.com>
357786
Patchwork-id: 82214
357786
O-Subject: [RHEL-7.6 qemu-kvm-rhev PATCH 3/3] aio-posix: do skip system call if ctx->notifier polling succeeds
357786
Bugzilla: 1628191
357786
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
357786
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
357786
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
357786
357786
From: Paolo Bonzini <pbonzini@redhat.com>
357786
357786
Commit 70232b5253 ("aio-posix: Don't count ctx->notifier as progress when
357786
2018-08-15), by not reporting progress, causes aio_poll to execute the
357786
system call when polling succeeds because of ctx->notifier.  This introduces
357786
latency before the call to aio_bh_poll() and negates the advantages of
357786
polling, unfortunately.
357786
357786
The fix builds on the previous patch, separating the effect of polling on
357786
the timeout from the progress reported to aio_poll().  ctx->notifier
357786
does zero the timeout, causing the caller to skip the system call,
357786
but it does not report progress, so that the bug fix of commit 70232b5253
357786
still stands.
357786
357786
Fixes: 70232b5253a3c4e03ed1ac47ef9246a8ac66c6fa
357786
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
357786
Message-Id: <20180912171040.1732-4-pbonzini@redhat.com>
357786
Reviewed-by: Fam Zheng <famz@redhat.com>
357786
Signed-off-by: Fam Zheng <famz@redhat.com>
357786
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
357786
---
357786
 util/aio-posix.c | 7 ++++---
357786
 1 file changed, 4 insertions(+), 3 deletions(-)
357786
357786
diff --git a/util/aio-posix.c b/util/aio-posix.c
357786
index 1b17597..357de8a 100644
357786
--- a/util/aio-posix.c
357786
+++ b/util/aio-posix.c
357786
@@ -498,10 +498,11 @@ static bool run_poll_handlers_once(AioContext *ctx, int64_t *timeout)
357786
     QLIST_FOREACH_RCU(node, &ctx->aio_handlers, node) {
357786
         if (!node->deleted && node->io_poll &&
357786
             aio_node_check(ctx, node->is_external) &&
357786
-            node->io_poll(node->opaque) &&
357786
-            node->opaque != &ctx->notifier) {
357786
+            node->io_poll(node->opaque)) {
357786
             *timeout = 0;
357786
-            progress = true;
357786
+            if (node->opaque != &ctx->notifier) {
357786
+                progress = true;
357786
+            }
357786
         }
357786
 
357786
         /* Caller handles freeing deleted nodes.  Don't do it here. */
357786
-- 
357786
1.8.3.1
357786