[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 15/19] test-bdrv-drain: Recursive draining with mult
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH 15/19] test-bdrv-drain: Recursive draining with multiple parents |
Date: |
Wed, 20 Dec 2017 11:34:08 +0100 |
Test that drain sections are correctly propagated through the graph.
Signed-off-by: Kevin Wolf <address@hidden>
---
tests/test-bdrv-drain.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/tests/test-bdrv-drain.c b/tests/test-bdrv-drain.c
index a1e5693f33..b7322c5826 100644
--- a/tests/test-bdrv-drain.c
+++ b/tests/test-bdrv-drain.c
@@ -338,6 +338,79 @@ static void test_nested(void)
blk_unref(blk);
}
+static void test_multiparent(void)
+{
+ BlockBackend *blk_a, *blk_b;
+ BlockDriverState *bs_a, *bs_b, *backing;
+ BDRVTestState *a_s, *b_s, *backing_s;
+
+ blk_a = blk_new(BLK_PERM_ALL, BLK_PERM_ALL);
+ bs_a = bdrv_new_open_driver(&bdrv_test, "test-node-a", BDRV_O_RDWR,
+ &error_abort);
+ a_s = bs_a->opaque;
+ blk_insert_bs(blk_a, bs_a, &error_abort);
+
+ blk_b = blk_new(BLK_PERM_ALL, BLK_PERM_ALL);
+ bs_b = bdrv_new_open_driver(&bdrv_test, "test-node-b", BDRV_O_RDWR,
+ &error_abort);
+ b_s = bs_b->opaque;
+ blk_insert_bs(blk_b, bs_b, &error_abort);
+
+ backing = bdrv_new_open_driver(&bdrv_test, "backing", 0, &error_abort);
+ backing_s = backing->opaque;
+ bdrv_set_backing_hd(bs_a, backing, &error_abort);
+ bdrv_set_backing_hd(bs_b, backing, &error_abort);
+
+ g_assert_cmpint(bs_a->quiesce_counter, ==, 0);
+ g_assert_cmpint(bs_b->quiesce_counter, ==, 0);
+ g_assert_cmpint(backing->quiesce_counter, ==, 0);
+ g_assert_cmpint(a_s->drain_count, ==, 0);
+ g_assert_cmpint(b_s->drain_count, ==, 0);
+ g_assert_cmpint(backing_s->drain_count, ==, 0);
+
+ do_drain_begin(BDRV_SUBTREE_DRAIN, bs_a);
+
+ g_assert_cmpint(bs_a->quiesce_counter, ==, 1);
+ g_assert_cmpint(bs_b->quiesce_counter, ==, 1);
+ g_assert_cmpint(backing->quiesce_counter, ==, 1);
+ g_assert_cmpint(a_s->drain_count, ==, 1);
+ g_assert_cmpint(b_s->drain_count, ==, 1);
+ g_assert_cmpint(backing_s->drain_count, ==, 1);
+
+ do_drain_begin(BDRV_SUBTREE_DRAIN, bs_b);
+
+ g_assert_cmpint(bs_a->quiesce_counter, ==, 2);
+ g_assert_cmpint(bs_b->quiesce_counter, ==, 2);
+ g_assert_cmpint(backing->quiesce_counter, ==, 2);
+ g_assert_cmpint(a_s->drain_count, ==, 2);
+ g_assert_cmpint(b_s->drain_count, ==, 2);
+ g_assert_cmpint(backing_s->drain_count, ==, 2);
+
+ do_drain_end(BDRV_SUBTREE_DRAIN, bs_b);
+
+ g_assert_cmpint(bs_a->quiesce_counter, ==, 1);
+ g_assert_cmpint(bs_b->quiesce_counter, ==, 1);
+ g_assert_cmpint(backing->quiesce_counter, ==, 1);
+ g_assert_cmpint(a_s->drain_count, ==, 1);
+ g_assert_cmpint(b_s->drain_count, ==, 1);
+ g_assert_cmpint(backing_s->drain_count, ==, 1);
+
+ do_drain_end(BDRV_SUBTREE_DRAIN, bs_a);
+
+ g_assert_cmpint(bs_a->quiesce_counter, ==, 0);
+ g_assert_cmpint(bs_b->quiesce_counter, ==, 0);
+ g_assert_cmpint(backing->quiesce_counter, ==, 0);
+ g_assert_cmpint(a_s->drain_count, ==, 0);
+ g_assert_cmpint(b_s->drain_count, ==, 0);
+ g_assert_cmpint(backing_s->drain_count, ==, 0);
+
+ bdrv_unref(backing);
+ bdrv_unref(bs_a);
+ bdrv_unref(bs_b);
+ blk_unref(blk_a);
+ blk_unref(blk_b);
+}
+
typedef struct TestBlockJob {
BlockJob common;
@@ -479,6 +552,7 @@ int main(int argc, char **argv)
g_test_add_func("/bdrv-drain/quiesce/coroutine", test_quiesce_coroutine);
g_test_add_func("/bdrv-drain/nested", test_nested);
+ g_test_add_func("/bdrv-drain/multiparent", test_multiparent);
g_test_add_func("/bdrv-drain/blockjob/drain_all", test_blockjob_drain_all);
g_test_add_func("/bdrv-drain/blockjob/drain", test_blockjob_drain);
--
2.13.6
- [Qemu-block] [PATCH 08/19] block: Don't block_job_pause_all() in bdrv_drain_all(), (continued)
- [Qemu-block] [PATCH 08/19] block: Don't block_job_pause_all() in bdrv_drain_all(), Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 06/19] blockjob: Pause job on draining any job BDS, Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 09/19] block: Nested drain_end must still call callbacks, Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 11/19] block: Don't notify parents in drain call chain, Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 10/19] test-bdrv-drain: Test nested drain sections, Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 12/19] block: Add bdrv_subtree_drained_begin/end(), Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 14/19] test-bdrv-drain: Test behaviour in coroutine context, Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 15/19] test-bdrv-drain: Recursive draining with multiple parents,
Kevin Wolf <=
- [Qemu-block] [PATCH 13/19] test-bdrv-drain: Tests for bdrv_subtree_drain, Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 17/19] test-bdrv-drain: Test graph changes in drained section, Kevin Wolf, 2017/12/20
- [Qemu-block] [PATCH 16/19] block: Allow graph changes in subtree drained section, Kevin Wolf, 2017/12/20
[Qemu-block] [PATCH 18/19] commit: Simplify reopen of base, Kevin Wolf, 2017/12/20
[Qemu-block] [PATCH 19/19] block: Keep nodes drained between reopen_queue/multiple, Kevin Wolf, 2017/12/20