Blame SOURCES/kvm-block-Remove-aio_poll-in-bdrv_drain_poll-variants.patch

357786
From 78a927e7c583a7556604e55b5d27d4c4c082fb64 Mon Sep 17 00:00:00 2001
357786
From: Kevin Wolf <kwolf@redhat.com>
357786
Date: Fri, 14 Sep 2018 10:55:37 +0200
357786
Subject: [PATCH 46/49] block: Remove aio_poll() in bdrv_drain_poll variants
357786
357786
RH-Author: Kevin Wolf <kwolf@redhat.com>
357786
Message-id: <20180914105540.18077-40-kwolf@redhat.com>
357786
Patchwork-id: 82191
357786
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 39/42] block: Remove aio_poll() in bdrv_drain_poll variants
357786
Bugzilla: 1601212
357786
RH-Acked-by: John Snow <jsnow@redhat.com>
357786
RH-Acked-by: Max Reitz <mreitz@redhat.com>
357786
RH-Acked-by: Fam Zheng <famz@redhat.com>
357786
357786
bdrv_drain_poll_top_level() was buggy because it didn't release the
357786
AioContext lock of the node to be drained before calling aio_poll().
357786
This way, callbacks called by aio_poll() would possibly take the lock a
357786
second time and run into a deadlock with a nested AIO_WAIT_WHILE() call.
357786
357786
However, it turns out that the aio_poll() call isn't actually needed any
357786
more. It was introduced in commit 91af091f923, which is effectively
357786
reverted by this patch. The cases it was supposed to fix are now covered
357786
by bdrv_drain_poll(), which waits for block jobs to reach a quiescent
357786
state.
357786
357786
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
357786
Reviewed-by: Fam Zheng <famz@redhat.com>
357786
Reviewed-by: Max Reitz <mreitz@redhat.com>
357786
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
357786
---
357786
 block/io.c | 8 --------
357786
 1 file changed, 8 deletions(-)
357786
357786
diff --git a/block/io.c b/block/io.c
357786
index 19db35e..3313958 100644
357786
--- a/block/io.c
357786
+++ b/block/io.c
357786
@@ -266,10 +266,6 @@ bool bdrv_drain_poll(BlockDriverState *bs, bool recursive,
357786
 static bool bdrv_drain_poll_top_level(BlockDriverState *bs, bool recursive,
357786
                                       BdrvChild *ignore_parent)
357786
 {
357786
-    /* Execute pending BHs first and check everything else only after the BHs
357786
-     * have executed. */
357786
-    while (aio_poll(bs->aio_context, false));
357786
-
357786
     return bdrv_drain_poll(bs, recursive, ignore_parent, false);
357786
 }
357786
 
357786
@@ -509,10 +505,6 @@ static bool bdrv_drain_all_poll(void)
357786
     BlockDriverState *bs = NULL;
357786
     bool result = false;
357786
 
357786
-    /* Execute pending BHs first (may modify the graph) and check everything
357786
-     * else only after the BHs have executed. */
357786
-    while (aio_poll(qemu_get_aio_context(), false));
357786
-
357786
     /* bdrv_drain_poll() can't make changes to the graph and we are holding the
357786
      * main AioContext lock, so iterating bdrv_next_all_states() is safe. */
357786
     while ((bs = bdrv_next_all_states(bs))) {
357786
-- 
357786
1.8.3.1
357786