Re: [PATCH resend] nbd: register yank function earlier

2021-07-05 Thread Vladimir Sementsov-Ogievskiy

04.07.2021 13:56, Lukas Straub wrote:

Although unlikely, qemu might hang in nbd_send_request().

Allow recovery in this case by registering the yank function before
calling it.

Signed-off-by: Lukas Straub



Reviewed-by: Vladimir Sementsov-Ogievskiy 


--
Best regards,
Vladimir



[PATCH resend] nbd: register yank function earlier

2021-07-04 Thread Lukas Straub
Although unlikely, qemu might hang in nbd_send_request().

Allow recovery in this case by registering the yank function before
calling it.

Signed-off-by: Lukas Straub 
---

Fix CC: email address so the mailing list doesn't reject it.

 block/nbd.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/block/nbd.c b/block/nbd.c
index 601fccc5ba..f6ff1c4fb4 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -369,32 +369,34 @@ int coroutine_fn 
nbd_co_do_establish_connection(BlockDriverState *bs,
 s->ioc = nbd_co_establish_connection(s->conn, &s->info, true, errp);
 if (!s->ioc) {
 return -ECONNREFUSED;
 }
 
+yank_register_function(BLOCKDEV_YANK_INSTANCE(s->bs->node_name), nbd_yank,
+   bs);
+
 ret = nbd_handle_updated_info(s->bs, NULL);
 if (ret < 0) {
 /*
  * We have connected, but must fail for other reasons.
  * Send NBD_CMD_DISC as a courtesy to the server.
  */
 NBDRequest request = { .type = NBD_CMD_DISC };
 
 nbd_send_request(s->ioc, &request);
 
+yank_unregister_function(BLOCKDEV_YANK_INSTANCE(s->bs->node_name),
+ nbd_yank, bs);
 object_unref(OBJECT(s->ioc));
 s->ioc = NULL;
 
 return ret;
 }
 
 qio_channel_set_blocking(s->ioc, false, NULL);
 qio_channel_attach_aio_context(s->ioc, bdrv_get_aio_context(bs));
 
-yank_register_function(BLOCKDEV_YANK_INSTANCE(s->bs->node_name), nbd_yank,
-   bs);
-
 /* successfully connected */
 s->state = NBD_CLIENT_CONNECTED;
 qemu_co_queue_restart_all(&s->free_sema);
 
 return 0;
-- 
2.32.0


pgpzd_EVcikxB.pgp
Description: OpenPGP digital signature