block-nbd was refacted during release 6.2.0, but we didn't induced all the needed patches within the 6.2.0 baseline, which leads to vm crash during migration. the reasons are as below: when iothread is configured, the coroutines should get back to the exact iothread that was out of. But within the 6.2.0 baseline, patches were missing, nbd related coroutine didn't have its related aio_context. It in fact get to the mainline aio_context, the mistaken context leads to vm crash.
49 lines
1.5 KiB
Diff
49 lines
1.5 KiB
Diff
From 6a49e752439f02ef9ccaac30d14acf185e31a261 Mon Sep 17 00:00:00 2001
|
|
From: Zhang Bo <oscar.zhangbo@huawei.com>
|
|
Date: Mon, 29 Aug 2022 15:35:36 +0800
|
|
Subject: [PATCH 3/5] block/nbd: Delete open timer when done
|
|
|
|
We start the open timer to cancel the connection attempt after a while.
|
|
Once nbd_do_establish_connection() has returned, the attempt is over,
|
|
and we no longer need the timer.
|
|
|
|
Delete it before returning from nbd_open(), so that it does not persist
|
|
for longer. It has no use after nbd_open(), and just like the reconnect
|
|
delay timer, it might well be dangerous if it were to fire afterwards.
|
|
|
|
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>
|
|
Signed-off-by: Zhang Bo <oscar.zhangbo@huawei.com>
|
|
---
|
|
block/nbd.c | 8 ++++++++
|
|
1 file changed, 8 insertions(+)
|
|
|
|
diff --git a/block/nbd.c b/block/nbd.c
|
|
index 16cd7fef77..5ff8a57314 100644
|
|
--- a/block/nbd.c
|
|
+++ b/block/nbd.c
|
|
@@ -1885,11 +1885,19 @@ static int nbd_open(BlockDriverState *bs, QDict *options, int flags,
|
|
goto fail;
|
|
}
|
|
|
|
+ /*
|
|
+ * The connect attempt is done, so we no longer need this timer.
|
|
+ * Delete it, because we do not want it to be around when this node
|
|
+ * is drained or closed.
|
|
+ */
|
|
+ open_timer_del(s);
|
|
+
|
|
nbd_client_connection_enable_retry(s->conn);
|
|
|
|
return 0;
|
|
|
|
fail:
|
|
+ open_timer_del(s);
|
|
nbd_clear_bdrvstate(bs);
|
|
return ret;
|
|
}
|
|
--
|
|
2.27.0
|
|
|