There is no need to keep the export name around, and it seems a better fit as an argument in the init() call. Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> --- block/nbd-client.c | 8 ++++---- block/nbd-client.h | 5 ++--- block/nbd.c | 13 ++++++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index 6d5f39c..b7eea21 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -353,15 +353,15 @@ static void nbd_teardown_connection(NbdClientSession *client) void nbd_client_session_close(NbdClientSession *client) { nbd_teardown_connection(client); - g_free(client->export_name); } -int nbd_client_session_init(NbdClientSession *client, - BlockDriverState *bs, int sock) +int nbd_client_session_init(NbdClientSession *client, BlockDriverState *bs, + int sock, const char *export) { int ret; - ret = nbd_receive_negotiate(sock, client->export_name, + logout("session init %s\n", export); + ret = nbd_receive_negotiate(sock, export, &client->nbdflags, &client->size, &client->blocksize); if (ret < 0) { diff --git a/block/nbd-client.h b/block/nbd-client.h index c1a7871..9c5246b 100644 --- a/block/nbd-client.h +++ b/block/nbd-client.h @@ -31,14 +31,13 @@ typedef struct NbdClientSession { Coroutine *recv_coroutine[MAX_NBD_REQUESTS]; struct nbd_reply reply; - char *export_name; /* An NBD server may export several devices */ bool is_unix; BlockDriverState *bs; } NbdClientSession; -int nbd_client_session_init(NbdClientSession *client, - BlockDriverState *bs, int sock); +int nbd_client_session_init(NbdClientSession *client, BlockDriverState *bs, + int sock, const char *export_name); void nbd_client_session_close(NbdClientSession *client); int nbd_client_session_co_discard(NbdClientSession *client, int64_t sector_num, diff --git a/block/nbd.c b/block/nbd.c index 79ba0a6..18c3b78 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -179,7 +179,7 @@ out: g_free(file); } -static int nbd_config(BDRVNBDState *s, QDict *options) +static int nbd_config(BDRVNBDState *s, QDict *options, char **export) { Error *local_err = NULL; @@ -209,8 +209,8 @@ static int nbd_config(BDRVNBDState *s, QDict *options) qemu_opt_set_number(s->socket_opts, "port", NBD_DEFAULT_PORT); } - s->client.export_name = g_strdup(qdict_get_try_str(options, "export")); - if (s->client.export_name) { + *export = g_strdup(qdict_get_try_str(options, "export")); + if (*export) { qdict_del(options, "export"); } @@ -243,10 +243,11 @@ static int nbd_establish_connection(BlockDriverState *bs) static int nbd_open(BlockDriverState *bs, QDict *options, int flags) { BDRVNBDState *s = bs->opaque; + char *export = NULL; int result, sock; /* Pop the config into our state object. Exit if invalid. */ - result = nbd_config(s, options); + result = nbd_config(s, options, &export); if (result != 0) { return result; } @@ -260,7 +261,9 @@ static int nbd_open(BlockDriverState *bs, QDict *options, int flags) } /* NBD handshake */ - return nbd_client_session_init(&s->client, bs, sock); + result = nbd_client_session_init(&s->client, bs, sock, export); + g_free(export); + return result; } static int nbd_co_readv(BlockDriverState *bs, int64_t sector_num, -- 1.8.3.rc1.49.g8d97506 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel