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)
55 lines
2.1 KiB
Diff
55 lines
2.1 KiB
Diff
From eeb4683ad8c40a03a4e91463ec1d1b651974b744 Mon Sep 17 00:00:00 2001
|
|
From: Hanna Reitz <hreitz@redhat.com>
|
|
Date: Fri, 4 Feb 2022 12:10:06 +0100
|
|
Subject: [PATCH 3/8] block/nbd: Delete reconnect delay timer when done
|
|
|
|
RH-Author: Hanna Reitz <hreitz@redhat.com>
|
|
RH-MergeRequest: 74: block/nbd: Handle AioContext changes
|
|
RH-Commit: [1/6] 34f92910b6ffd256d781109a2b39737fc6ab449c (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>
|
|
|
|
We start the reconnect delay timer to cancel the reconnection attempt
|
|
after a while. Once nbd_co_do_establish_connection() has returned, this
|
|
attempt is over, and we no longer need the timer.
|
|
|
|
Delete it before returning from nbd_reconnect_attempt(), so that it does
|
|
not persist beyond the I/O request that was paused for reconnecting; we
|
|
do not want it to fire in a drained section, because all sort of things
|
|
can happen in such a section (e.g. the AioContext might be changed, and
|
|
we do not want the timer to fire in the wrong context; or the BDS might
|
|
even be deleted, and so the timer CB would access already-freed data).
|
|
|
|
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 3ce1fc16bad9c3f8b7b10b451a224d6d76e5c551)
|
|
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
|
|
---
|
|
block/nbd.c | 7 +++++++
|
|
1 file changed, 7 insertions(+)
|
|
|
|
diff --git a/block/nbd.c b/block/nbd.c
|
|
index 5ef462db1b..b8e5a9b4cc 100644
|
|
--- a/block/nbd.c
|
|
+++ b/block/nbd.c
|
|
@@ -353,6 +353,13 @@ static coroutine_fn void nbd_reconnect_attempt(BDRVNBDState *s)
|
|
}
|
|
|
|
nbd_co_do_establish_connection(s->bs, NULL);
|
|
+
|
|
+ /*
|
|
+ * The reconnect attempt is done (maybe successfully, maybe not), so
|
|
+ * we no longer need this timer. Delete it so it will not outlive
|
|
+ * this I/O request (so draining removes all timers).
|
|
+ */
|
|
+ reconnect_delay_timer_del(s);
|
|
}
|
|
|
|
static coroutine_fn int nbd_receive_replies(BDRVNBDState *s, uint64_t handle)
|
|
--
|
|
2.27.0
|
|
|