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)
108 lines
3.7 KiB
Diff
108 lines
3.7 KiB
Diff
From 6d9d86cc4e6149d4c0793e8ceb65dab7535a4561 Mon Sep 17 00:00:00 2001
|
|
From: Hanna Reitz <hreitz@redhat.com>
|
|
Date: Fri, 4 Feb 2022 12:10:11 +0100
|
|
Subject: [PATCH 7/8] block/nbd: Move s->ioc on AioContext change
|
|
|
|
RH-Author: Hanna Reitz <hreitz@redhat.com>
|
|
RH-MergeRequest: 74: block/nbd: Handle AioContext changes
|
|
RH-Commit: [5/6] b3c1eb21ac70d64fdac6094468a72cfbe50a30a9 (hreitz/qemu-kvm-c-9-s)
|
|
RH-Bugzilla: 2033626
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Acked-by: Eric Blake <eblake@redhat.com>
|
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
|
s->ioc must always be attached to the NBD node's AioContext. If that
|
|
context changes, s->ioc must be attached to the new context.
|
|
|
|
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2033626
|
|
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
|
|
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
|
|
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
|
|
(cherry picked from commit e15f3a66c830e3fce99c9d56c493c2f7078a1225)
|
|
|
|
Conflict:
|
|
- block/nbd.c: open_timer was added after the 6.2 release, so we need
|
|
not (and cannot) assert it is NULL here.
|
|
|
|
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
|
|
---
|
|
block/nbd.c | 41 +++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 41 insertions(+)
|
|
|
|
diff --git a/block/nbd.c b/block/nbd.c
|
|
index aab20125d8..a3896c7f5f 100644
|
|
--- a/block/nbd.c
|
|
+++ b/block/nbd.c
|
|
@@ -2003,6 +2003,38 @@ static void nbd_cancel_in_flight(BlockDriverState *bs)
|
|
nbd_co_establish_connection_cancel(s->conn);
|
|
}
|
|
|
|
+static void nbd_attach_aio_context(BlockDriverState *bs,
|
|
+ AioContext *new_context)
|
|
+{
|
|
+ BDRVNBDState *s = bs->opaque;
|
|
+
|
|
+ /*
|
|
+ * The reconnect_delay_timer is scheduled in I/O paths when the
|
|
+ * connection is lost, to cancel the reconnection attempt after a
|
|
+ * given time. Once this attempt is done (successfully or not),
|
|
+ * nbd_reconnect_attempt() ensures the timer is deleted before the
|
|
+ * respective I/O request is resumed.
|
|
+ * Since the AioContext can only be changed when a node is drained,
|
|
+ * the reconnect_delay_timer cannot be active here.
|
|
+ */
|
|
+ assert(!s->reconnect_delay_timer);
|
|
+
|
|
+ if (s->ioc) {
|
|
+ qio_channel_attach_aio_context(s->ioc, new_context);
|
|
+ }
|
|
+}
|
|
+
|
|
+static void nbd_detach_aio_context(BlockDriverState *bs)
|
|
+{
|
|
+ BDRVNBDState *s = bs->opaque;
|
|
+
|
|
+ assert(!s->reconnect_delay_timer);
|
|
+
|
|
+ if (s->ioc) {
|
|
+ qio_channel_detach_aio_context(s->ioc);
|
|
+ }
|
|
+}
|
|
+
|
|
static BlockDriver bdrv_nbd = {
|
|
.format_name = "nbd",
|
|
.protocol_name = "nbd",
|
|
@@ -2026,6 +2058,9 @@ static BlockDriver bdrv_nbd = {
|
|
.bdrv_dirname = nbd_dirname,
|
|
.strong_runtime_opts = nbd_strong_runtime_opts,
|
|
.bdrv_cancel_in_flight = nbd_cancel_in_flight,
|
|
+
|
|
+ .bdrv_attach_aio_context = nbd_attach_aio_context,
|
|
+ .bdrv_detach_aio_context = nbd_detach_aio_context,
|
|
};
|
|
|
|
static BlockDriver bdrv_nbd_tcp = {
|
|
@@ -2051,6 +2086,9 @@ static BlockDriver bdrv_nbd_tcp = {
|
|
.bdrv_dirname = nbd_dirname,
|
|
.strong_runtime_opts = nbd_strong_runtime_opts,
|
|
.bdrv_cancel_in_flight = nbd_cancel_in_flight,
|
|
+
|
|
+ .bdrv_attach_aio_context = nbd_attach_aio_context,
|
|
+ .bdrv_detach_aio_context = nbd_detach_aio_context,
|
|
};
|
|
|
|
static BlockDriver bdrv_nbd_unix = {
|
|
@@ -2076,6 +2114,9 @@ static BlockDriver bdrv_nbd_unix = {
|
|
.bdrv_dirname = nbd_dirname,
|
|
.strong_runtime_opts = nbd_strong_runtime_opts,
|
|
.bdrv_cancel_in_flight = nbd_cancel_in_flight,
|
|
+
|
|
+ .bdrv_attach_aio_context = nbd_attach_aio_context,
|
|
+ .bdrv_detach_aio_context = nbd_detach_aio_context,
|
|
};
|
|
|
|
static void bdrv_nbd_init(void)
|
|
--
|
|
2.27.0
|
|
|