summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorVladimir Sementsov-Ogievskiy2021-06-10 12:07:36 +0200
committerEric Blake2021-06-18 17:59:53 +0200
commit6cc702beac795a6de7b5f97700b140dcd9936055 (patch)
tree7a1a439f95a28cb851bce83f856e5e2ba7ea9420 /block
parentqemu-sockets: introduce socket_address_parse_named_fd() (diff)
downloadqemu-6cc702beac795a6de7b5f97700b140dcd9936055.tar.gz
qemu-6cc702beac795a6de7b5f97700b140dcd9936055.tar.xz
qemu-6cc702beac795a6de7b5f97700b140dcd9936055.zip
block/nbd: call socket_address_parse_named_fd() in advance
Detecting monitor by current coroutine works bad when we are not in coroutine context. And that's exactly so in nbd reconnect code, where qio_channel_socket_connect_sync() is called from thread. Monitor is needed only to parse named file descriptor. So, let's just parse it during nbd_open(), so that all further users of s->saddr don't need to access monitor. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20210610100802.5888-7-vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/nbd.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/block/nbd.c b/block/nbd.c
index f3a036354d..1c99654ef7 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -2140,6 +2140,12 @@ static SocketAddress *nbd_config(BDRVNBDState *s, QDict *options,
goto done;
}
+ if (socket_address_parse_named_fd(saddr, errp) < 0) {
+ qapi_free_SocketAddress(saddr);
+ saddr = NULL;
+ goto done;
+ }
+
done:
qobject_unref(addr);
visit_free(iv);