ed795e95d8
- kvm-block-Lock-AioContext-for-drain_end-in-blockdev-reop.patch [bz#2046659] - kvm-iotests-Test-blockdev-reopen-with-iothreads-and-thro.patch [bz#2046659] - kvm-block-nbd-Delete-reconnect-delay-timer-when-done.patch [bz#2033626] - kvm-block-nbd-Assert-there-are-no-timers-when-closed.patch [bz#2033626] - kvm-iotests.py-Add-QemuStorageDaemon-class.patch [bz#2033626] - kvm-iotests-281-Test-lingering-timers.patch [bz#2033626] - kvm-block-nbd-Move-s-ioc-on-AioContext-change.patch [bz#2033626] - kvm-iotests-281-Let-NBD-connection-yield-in-iothread.patch [bz#2033626] - Resolves: bz#2046659 (qemu crash after execute blockdev-reopen with iothread) - Resolves: bz#2033626 (Qemu core dump when start guest with nbd node or do block jobs to nbd node)
64 lines
2.3 KiB
Diff
64 lines
2.3 KiB
Diff
From 7b973b9cb7b890eaf9a31c99f5c272b513322ac1 Mon Sep 17 00:00:00 2001
|
|
From: Kevin Wolf <kwolf@redhat.com>
|
|
Date: Thu, 3 Feb 2022 15:05:33 +0100
|
|
Subject: [PATCH 1/8] block: Lock AioContext for drain_end in blockdev-reopen
|
|
|
|
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
RH-MergeRequest: 73: block: Lock AioContext for drain_end in blockdev-reopen
|
|
RH-Commit: [1/2] db25e999152b0e4f09decade1ac76b9f56cd9706 (kmwolf/centos-qemu-kvm)
|
|
RH-Bugzilla: 2046659
|
|
RH-Acked-by: Sergio Lopez <None>
|
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
RH-Acked-by: Hanna Reitz <hreitz@redhat.com>
|
|
|
|
bdrv_subtree_drained_end() requires the caller to hold the AioContext
|
|
lock for the drained node. Not doing this for nodes outside of the main
|
|
AioContext leads to crashes when AIO_WAIT_WHILE() needs to wait and
|
|
tries to temporarily release the lock.
|
|
|
|
Fixes: 3908b7a8994fa5ef7a89aa58cd5a02fc58141592
|
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2046659
|
|
Reported-by: Qing Wang <qinwang@redhat.com>
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
Message-Id: <20220203140534.36522-2-kwolf@redhat.com>
|
|
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
(cherry picked from commit aba8205be0707b9d108e32254e186ba88107a869)
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
---
|
|
blockdev.c | 11 ++++++++++-
|
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/blockdev.c b/blockdev.c
|
|
index b35072644e..565f6a81fd 100644
|
|
--- a/blockdev.c
|
|
+++ b/blockdev.c
|
|
@@ -3562,6 +3562,7 @@ void qmp_blockdev_reopen(BlockdevOptionsList *reopen_list, Error **errp)
|
|
{
|
|
BlockReopenQueue *queue = NULL;
|
|
GSList *drained = NULL;
|
|
+ GSList *p;
|
|
|
|
/* Add each one of the BDS that we want to reopen to the queue */
|
|
for (; reopen_list != NULL; reopen_list = reopen_list->next) {
|
|
@@ -3611,7 +3612,15 @@ void qmp_blockdev_reopen(BlockdevOptionsList *reopen_list, Error **errp)
|
|
|
|
fail:
|
|
bdrv_reopen_queue_free(queue);
|
|
- g_slist_free_full(drained, (GDestroyNotify) bdrv_subtree_drained_end);
|
|
+ for (p = drained; p; p = p->next) {
|
|
+ BlockDriverState *bs = p->data;
|
|
+ AioContext *ctx = bdrv_get_aio_context(bs);
|
|
+
|
|
+ aio_context_acquire(ctx);
|
|
+ bdrv_subtree_drained_end(bs);
|
|
+ aio_context_release(ctx);
|
|
+ }
|
|
+ g_slist_free(drained);
|
|
}
|
|
|
|
void qmp_blockdev_del(const char *node_name, Error **errp)
|
|
--
|
|
2.27.0
|
|
|