Blame SOURCES/kvm-tests-test-bdrv-drain-bdrv_drain_all-works-in-corout.patch

ae23c9
From 6d23d16153f4fe9c01c9f2e02620ce324219b027 Mon Sep 17 00:00:00 2001
ae23c9
From: Kevin Wolf <kwolf@redhat.com>
ae23c9
Date: Wed, 10 Oct 2018 20:08:39 +0100
ae23c9
Subject: [PATCH 08/49] tests/test-bdrv-drain: bdrv_drain_all() works in
ae23c9
 coroutines now
ae23c9
ae23c9
RH-Author: Kevin Wolf <kwolf@redhat.com>
ae23c9
Message-id: <20181010200843.6710-6-kwolf@redhat.com>
ae23c9
Patchwork-id: 82582
ae23c9
O-Subject: [RHEL-8 qemu-kvm PATCH 05/44] tests/test-bdrv-drain: bdrv_drain_all() works in coroutines now
ae23c9
Bugzilla: 1637976
ae23c9
RH-Acked-by: Max Reitz <mreitz@redhat.com>
ae23c9
RH-Acked-by: John Snow <jsnow@redhat.com>
ae23c9
RH-Acked-by: Thomas Huth <thuth@redhat.com>
ae23c9
ae23c9
Since we use bdrv_do_drained_begin/end() for bdrv_drain_all_begin/end(),
ae23c9
coroutine context is automatically left with a BH, preventing the
ae23c9
deadlocks that made bdrv_drain_all*() unsafe in coroutine context. Now
ae23c9
that we even removed the old polling code as dead code, it's obvious
ae23c9
that it's compatible now.
ae23c9
ae23c9
Enable the coroutine test cases for bdrv_drain_all().
ae23c9
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
ae23c9
(cherry picked from commit 6d0252f2f9cb49925deb1c41101462c9481dfc90)
ae23c9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
ae23c9
---
ae23c9
 tests/test-bdrv-drain.c | 16 ++++++++++++++--
ae23c9
 1 file changed, 14 insertions(+), 2 deletions(-)
ae23c9
ae23c9
diff --git a/tests/test-bdrv-drain.c b/tests/test-bdrv-drain.c
ae23c9
index f1276a1..f5d85c9 100644
ae23c9
--- a/tests/test-bdrv-drain.c
ae23c9
+++ b/tests/test-bdrv-drain.c
ae23c9
@@ -233,6 +233,11 @@ static void test_drv_cb_drain_subtree(void)
ae23c9
     test_drv_cb_common(BDRV_SUBTREE_DRAIN, true);
ae23c9
 }
ae23c9
 
ae23c9
+static void test_drv_cb_co_drain_all(void)
ae23c9
+{
ae23c9
+    call_in_coroutine(test_drv_cb_drain_all);
ae23c9
+}
ae23c9
+
ae23c9
 static void test_drv_cb_co_drain(void)
ae23c9
 {
ae23c9
     call_in_coroutine(test_drv_cb_drain);
ae23c9
@@ -289,6 +294,11 @@ static void test_quiesce_drain_subtree(void)
ae23c9
     test_quiesce_common(BDRV_SUBTREE_DRAIN, true);
ae23c9
 }
ae23c9
 
ae23c9
+static void test_quiesce_co_drain_all(void)
ae23c9
+{
ae23c9
+    call_in_coroutine(test_quiesce_drain_all);
ae23c9
+}
ae23c9
+
ae23c9
 static void test_quiesce_co_drain(void)
ae23c9
 {
ae23c9
     call_in_coroutine(test_quiesce_drain);
ae23c9
@@ -795,7 +805,8 @@ int main(int argc, char **argv)
ae23c9
     g_test_add_func("/bdrv-drain/driver-cb/drain_subtree",
ae23c9
                     test_drv_cb_drain_subtree);
ae23c9
 
ae23c9
-    // XXX bdrv_drain_all() doesn't work in coroutine context
ae23c9
+    g_test_add_func("/bdrv-drain/driver-cb/co/drain_all",
ae23c9
+                    test_drv_cb_co_drain_all);
ae23c9
     g_test_add_func("/bdrv-drain/driver-cb/co/drain", test_drv_cb_co_drain);
ae23c9
     g_test_add_func("/bdrv-drain/driver-cb/co/drain_subtree",
ae23c9
                     test_drv_cb_co_drain_subtree);
ae23c9
@@ -806,7 +817,8 @@ int main(int argc, char **argv)
ae23c9
     g_test_add_func("/bdrv-drain/quiesce/drain_subtree",
ae23c9
                     test_quiesce_drain_subtree);
ae23c9
 
ae23c9
-    // XXX bdrv_drain_all() doesn't work in coroutine context
ae23c9
+    g_test_add_func("/bdrv-drain/quiesce/co/drain_all",
ae23c9
+                    test_quiesce_co_drain_all);
ae23c9
     g_test_add_func("/bdrv-drain/quiesce/co/drain", test_quiesce_co_drain);
ae23c9
     g_test_add_func("/bdrv-drain/quiesce/co/drain_subtree",
ae23c9
                     test_quiesce_co_drain_subtree);
ae23c9
-- 
ae23c9
1.8.3.1
ae23c9