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