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

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