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

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