|
@@ -434,19 +434,23 @@ static void nfs_client_close(NFSClient *client)
|
|
if (client->context) {
|
|
if (client->context) {
|
|
if (client->fh) {
|
|
if (client->fh) {
|
|
nfs_close(client->context, client->fh);
|
|
nfs_close(client->context, client->fh);
|
|
|
|
+ client->fh = NULL;
|
|
}
|
|
}
|
|
aio_set_fd_handler(client->aio_context, nfs_get_fd(client->context),
|
|
aio_set_fd_handler(client->aio_context, nfs_get_fd(client->context),
|
|
false, NULL, NULL, NULL, NULL);
|
|
false, NULL, NULL, NULL, NULL);
|
|
nfs_destroy_context(client->context);
|
|
nfs_destroy_context(client->context);
|
|
|
|
+ client->context = NULL;
|
|
}
|
|
}
|
|
- memset(client, 0, sizeof(NFSClient));
|
|
|
|
|
|
+ g_free(client->path);
|
|
|
|
+ qemu_mutex_destroy(&client->mutex);
|
|
|
|
+ qapi_free_NFSServer(client->server);
|
|
|
|
+ client->server = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
static void nfs_file_close(BlockDriverState *bs)
|
|
static void nfs_file_close(BlockDriverState *bs)
|
|
{
|
|
{
|
|
NFSClient *client = bs->opaque;
|
|
NFSClient *client = bs->opaque;
|
|
nfs_client_close(client);
|
|
nfs_client_close(client);
|
|
- qemu_mutex_destroy(&client->mutex);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static NFSServer *nfs_config(QDict *options, Error **errp)
|
|
static NFSServer *nfs_config(QDict *options, Error **errp)
|
|
@@ -499,6 +503,7 @@ static int64_t nfs_client_open(NFSClient *client, QDict *options,
|
|
struct stat st;
|
|
struct stat st;
|
|
char *file = NULL, *strp = NULL;
|
|
char *file = NULL, *strp = NULL;
|
|
|
|
|
|
|
|
+ qemu_mutex_init(&client->mutex);
|
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
|
opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort);
|
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
|
qemu_opts_absorb_qdict(opts, options, &local_err);
|
|
if (local_err) {
|
|
if (local_err) {
|
|
@@ -661,7 +666,7 @@ static int nfs_file_open(BlockDriverState *bs, QDict *options, int flags,
|
|
if (ret < 0) {
|
|
if (ret < 0) {
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
- qemu_mutex_init(&client->mutex);
|
|
|
|
|
|
+
|
|
bs->total_sectors = ret;
|
|
bs->total_sectors = ret;
|
|
ret = 0;
|
|
ret = 0;
|
|
return ret;
|
|
return ret;
|