block/nfs: Implement bdrv_dirname()
While the basic idea is obvious and could be handled by the default bdrv_dirname() implementation, we cannot generate a directory name if the gid or uid are set, so we have to explicitly return NULL in those cases. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Message-id: 20190201192935.18394-19-mreitz@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
8a6239c071
commit
0dcbc54a95
15
block/nfs.c
15
block/nfs.c
@ -855,6 +855,20 @@ static void nfs_refresh_filename(BlockDriverState *bs, QDict *options)
|
|||||||
bs->full_open_options = opts;
|
bs->full_open_options = opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *nfs_dirname(BlockDriverState *bs, Error **errp)
|
||||||
|
{
|
||||||
|
NFSClient *client = bs->opaque;
|
||||||
|
|
||||||
|
if (client->uid || client->gid) {
|
||||||
|
bdrv_refresh_filename(bs);
|
||||||
|
error_setg(errp, "Cannot generate a base directory for NFS node '%s'",
|
||||||
|
bs->filename);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_strdup_printf("nfs://%s%s/", client->server->host, client->path);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef LIBNFS_FEATURE_PAGECACHE
|
#ifdef LIBNFS_FEATURE_PAGECACHE
|
||||||
static void coroutine_fn nfs_co_invalidate_cache(BlockDriverState *bs,
|
static void coroutine_fn nfs_co_invalidate_cache(BlockDriverState *bs,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
@ -889,6 +903,7 @@ static BlockDriver bdrv_nfs = {
|
|||||||
.bdrv_detach_aio_context = nfs_detach_aio_context,
|
.bdrv_detach_aio_context = nfs_detach_aio_context,
|
||||||
.bdrv_attach_aio_context = nfs_attach_aio_context,
|
.bdrv_attach_aio_context = nfs_attach_aio_context,
|
||||||
.bdrv_refresh_filename = nfs_refresh_filename,
|
.bdrv_refresh_filename = nfs_refresh_filename,
|
||||||
|
.bdrv_dirname = nfs_dirname,
|
||||||
|
|
||||||
#ifdef LIBNFS_FEATURE_PAGECACHE
|
#ifdef LIBNFS_FEATURE_PAGECACHE
|
||||||
.bdrv_co_invalidate_cache = nfs_co_invalidate_cache,
|
.bdrv_co_invalidate_cache = nfs_co_invalidate_cache,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user