Blame SOURCES/kvm-block-backend-Add-.drained_poll-callback.patch

1bdc94
From 79543d4ff66ab2c8f7050e5a5749ea11d1f0c2c0 Mon Sep 17 00:00:00 2001
1bdc94
From: Kevin Wolf <kwolf@redhat.com>
1bdc94
Date: Fri, 14 Sep 2018 10:55:32 +0200
1bdc94
Subject: [PATCH 41/49] block-backend: Add .drained_poll callback
1bdc94
1bdc94
RH-Author: Kevin Wolf <kwolf@redhat.com>
1bdc94
Message-id: <20180914105540.18077-35-kwolf@redhat.com>
1bdc94
Patchwork-id: 82190
1bdc94
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 34/42] block-backend: Add .drained_poll callback
1bdc94
Bugzilla: 1601212
1bdc94
RH-Acked-by: John Snow <jsnow@redhat.com>
1bdc94
RH-Acked-by: Max Reitz <mreitz@redhat.com>
1bdc94
RH-Acked-by: Fam Zheng <famz@redhat.com>
1bdc94
1bdc94
A bdrv_drain operation must ensure that all parents are quiesced, this
1bdc94
includes BlockBackends. Otherwise, callbacks called by requests that are
1bdc94
completed on the BDS layer, but not quite yet on the BlockBackend layer
1bdc94
could still create new requests.
1bdc94
1bdc94
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
1bdc94
Reviewed-by: Fam Zheng <famz@redhat.com>
1bdc94
Reviewed-by: Max Reitz <mreitz@redhat.com>
1bdc94
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
1bdc94
---
1bdc94
 block/block-backend.c | 9 +++++++++
1bdc94
 1 file changed, 9 insertions(+)
1bdc94
1bdc94
diff --git a/block/block-backend.c b/block/block-backend.c
1bdc94
index 2262506..ea85770 100644
1bdc94
--- a/block/block-backend.c
1bdc94
+++ b/block/block-backend.c
1bdc94
@@ -121,6 +121,7 @@ static void blk_root_inherit_options(int *child_flags, QDict *child_options,
1bdc94
     abort();
1bdc94
 }
1bdc94
 static void blk_root_drained_begin(BdrvChild *child);
1bdc94
+static bool blk_root_drained_poll(BdrvChild *child);
1bdc94
 static void blk_root_drained_end(BdrvChild *child);
1bdc94
 
1bdc94
 static void blk_root_change_media(BdrvChild *child, bool load);
1bdc94
@@ -294,6 +295,7 @@ static const BdrvChildRole child_root = {
1bdc94
     .get_parent_desc    = blk_root_get_parent_desc,
1bdc94
 
1bdc94
     .drained_begin      = blk_root_drained_begin,
1bdc94
+    .drained_poll       = blk_root_drained_poll,
1bdc94
     .drained_end        = blk_root_drained_end,
1bdc94
 
1bdc94
     .activate           = blk_root_activate,
1bdc94
@@ -2217,6 +2219,13 @@ static void blk_root_drained_begin(BdrvChild *child)
1bdc94
     }
1bdc94
 }
1bdc94
 
1bdc94
+static bool blk_root_drained_poll(BdrvChild *child)
1bdc94
+{
1bdc94
+    BlockBackend *blk = child->opaque;
1bdc94
+    assert(blk->quiesce_counter);
1bdc94
+    return !!blk->in_flight;
1bdc94
+}
1bdc94
+
1bdc94
 static void blk_root_drained_end(BdrvChild *child)
1bdc94
 {
1bdc94
     BlockBackend *blk = child->opaque;
1bdc94
-- 
1bdc94
1.8.3.1
1bdc94