@@ -680,10 +680,20 @@ void bdrv_subtree_drained_begin(BlockDriverState *bs);
/**
* bdrv_drained_end:
*
- * End a quiescent section started by bdrv_drained_begin().
+ * End a quiescent section started by bdrv_drained_begin(). This may
+ * result in block graph changes.
*/
void bdrv_drained_end(BlockDriverState *bs);
+/**
+ * bdrv_drained_end_no_poll:
+ *
+ * Same as bdrv_drained_end(), but do not poll for the subgraph to
+ * actually become unquiesced. Therefore, no graph changes will occur
+ * with this function.
+ */
+void bdrv_drained_end_no_poll(BlockDriverState *bs);
+
/**
* End a quiescent section started by bdrv_subtree_drained_begin().
*/
@@ -539,6 +539,11 @@ void bdrv_drained_end(BlockDriverState *bs)
bdrv_do_drained_end(bs, false, NULL, false, true, NULL);
}
+void bdrv_drained_end_no_poll(BlockDriverState *bs)
+{
+ bdrv_do_drained_end(bs, false, NULL, false, false, NULL);
+}
+
void bdrv_subtree_drained_end(BlockDriverState *bs)
{
bdrv_do_drained_end(bs, true, NULL, false, true, NULL);
In contrast to bdrv_drained_end(), which does poll and may thus lead to graph changes, this new interface to bdrv_do_drained_end() will not poll. Signed-off-by: Max Reitz <mreitz@redhat.com> --- include/block/block.h | 12 +++++++++++- block/io.c | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-)