mirror of https://github.com/xemu-project/xemu.git
9pfs: remove side-effects in local_init()
If this function fails, it should not modify *ctx. Signed-off-by: Greg Kurz <groug@kaod.org> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
56fc494bdc
commit
00c90bd1c2
|
@ -1168,9 +1168,25 @@ static int local_ioc_getversion(FsContext *ctx, V9fsPath *path,
|
||||||
|
|
||||||
static int local_init(FsContext *ctx)
|
static int local_init(FsContext *ctx)
|
||||||
{
|
{
|
||||||
int err = 0;
|
|
||||||
struct statfs stbuf;
|
struct statfs stbuf;
|
||||||
|
|
||||||
|
#ifdef FS_IOC_GETVERSION
|
||||||
|
/*
|
||||||
|
* use ioc_getversion only if the ioctl is definied
|
||||||
|
*/
|
||||||
|
if (statfs(ctx->fs_root, &stbuf) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
switch (stbuf.f_type) {
|
||||||
|
case EXT2_SUPER_MAGIC:
|
||||||
|
case BTRFS_SUPER_MAGIC:
|
||||||
|
case REISERFS_SUPER_MAGIC:
|
||||||
|
case XFS_SUPER_MAGIC:
|
||||||
|
ctx->exops.get_st_gen = local_ioc_getversion;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ctx->export_flags & V9FS_SM_PASSTHROUGH) {
|
if (ctx->export_flags & V9FS_SM_PASSTHROUGH) {
|
||||||
ctx->xops = passthrough_xattr_ops;
|
ctx->xops = passthrough_xattr_ops;
|
||||||
} else if (ctx->export_flags & V9FS_SM_MAPPED) {
|
} else if (ctx->export_flags & V9FS_SM_MAPPED) {
|
||||||
|
@ -1185,23 +1201,8 @@ static int local_init(FsContext *ctx)
|
||||||
ctx->xops = passthrough_xattr_ops;
|
ctx->xops = passthrough_xattr_ops;
|
||||||
}
|
}
|
||||||
ctx->export_flags |= V9FS_PATHNAME_FSCONTEXT;
|
ctx->export_flags |= V9FS_PATHNAME_FSCONTEXT;
|
||||||
#ifdef FS_IOC_GETVERSION
|
|
||||||
/*
|
return 0;
|
||||||
* use ioc_getversion only if the iocl is definied
|
|
||||||
*/
|
|
||||||
err = statfs(ctx->fs_root, &stbuf);
|
|
||||||
if (!err) {
|
|
||||||
switch (stbuf.f_type) {
|
|
||||||
case EXT2_SUPER_MAGIC:
|
|
||||||
case BTRFS_SUPER_MAGIC:
|
|
||||||
case REISERFS_SUPER_MAGIC:
|
|
||||||
case XFS_SUPER_MAGIC:
|
|
||||||
ctx->exops.get_st_gen = local_ioc_getversion;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int local_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse)
|
static int local_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse)
|
||||||
|
|
Loading…
Reference in New Issue