aboutsummaryrefslogtreecommitdiff
path: root/softmmu/runstate.c
diff options
context:
space:
mode:
authorSergio Lopez <slp@redhat.com>2021-02-01 13:50:32 +0100
committerKevin Wolf <kwolf@redhat.com>2021-02-02 13:23:47 +0100
commit1895b977f9a69419ae45cfc25805f71efae32eaf (patch)
tree5405b333518fc9e7977a9d4e88ed5e1fffc5acc0 /softmmu/runstate.c
parent722d8e73d65cb54f39d360ecb2147ac58f43c399 (diff)
block: move blk_exp_close_all() to qemu_cleanup()
Move blk_exp_close_all() from bdrv_close() to qemu_cleanup(), before bdrv_drain_all_begin(). Export drivers may have coroutines yielding at some point in the block layer, so we need to shut them down before draining the block layer, as otherwise they may get stuck blk_wait_while_drained(). RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1900505 Signed-off-by: Sergio Lopez <slp@redhat.com> Message-Id: <20210201125032.44713-3-slp@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'softmmu/runstate.c')
-rw-r--r--softmmu/runstate.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/softmmu/runstate.c b/softmmu/runstate.c
index beee050815..a7fcb603f7 100644
--- a/softmmu/runstate.c
+++ b/softmmu/runstate.c
@@ -25,6 +25,7 @@
#include "qemu/osdep.h"
#include "audio/audio.h"
#include "block/block.h"
+#include "block/export.h"
#include "chardev/char.h"
#include "crypto/cipher.h"
#include "crypto/init.h"
@@ -785,6 +786,14 @@ void qemu_cleanup(void)
migration_shutdown();
/*
+ * Close the exports before draining the block layer. The export
+ * drivers may have coroutines yielding on it, so we need to clean
+ * them up before the drain, as otherwise they may be get stuck in
+ * blk_wait_while_drained().
+ */
+ blk_exp_close_all();
+
+ /*
* We must cancel all block jobs while the block layer is drained,
* or cancelling will be affected by throttling and thus may block
* for an extended period of time.