X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=fsdev%2Ffile-op-9p.h;h=42f677cf38c2d2002868a476e9870eafd79df839;hb=3a489d38fd0076d2f9fc8c60b70aa66290a0a199;hp=b8c26024a9555f27f6503ef3f159c34182464626;hpb=586fc27e6a2ade22e35089e8972bc678b113e1db;p=mirror_qemu.git diff --git a/fsdev/file-op-9p.h b/fsdev/file-op-9p.h index b8c26024a9..42f677cf38 100644 --- a/fsdev/file-op-9p.h +++ b/fsdev/file-op-9p.h @@ -1,5 +1,5 @@ /* - * Virtio 9p + * 9p * * Copyright IBM, Corp. 2010 * @@ -10,32 +10,31 @@ * the COPYING file in the top-level directory. * */ -#ifndef _FILEOP_H -#define _FILEOP_H + +#ifndef FILE_OP_9P_H +#define FILE_OP_9P_H + #include #include -#include #include +#include "qemu-fsdev-throttle.h" #define SM_LOCAL_MODE_BITS 0600 #define SM_LOCAL_DIR_MODE_BITS 0700 -typedef struct FsCred -{ +typedef struct FsCred { uid_t fc_uid; gid_t fc_gid; mode_t fc_mode; dev_t fc_rdev; } FsCred; -struct xattr_operations; -struct FsContext; -struct V9fsPath; +typedef struct FsContext FsContext; +typedef struct V9fsPath V9fsPath; -typedef struct extended_ops { - int (*get_st_gen)(struct FsContext *, struct V9fsPath *, - mode_t, uint64_t *); -} extended_ops; +typedef struct ExtendedOps { + int (*get_st_gen)(FsContext *, V9fsPath *, mode_t, uint64_t *); +} ExtendedOps; /* export flags */ #define V9FS_IMMEDIATE_WRITEOUT 0x00000001 @@ -60,11 +59,22 @@ typedef struct extended_ops { #define V9FS_RDONLY 0x00000040 #define V9FS_PROXY_SOCK_FD 0x00000080 #define V9FS_PROXY_SOCK_NAME 0x00000100 +/* + * multidevs option (either one of the two applies exclusively) + */ +#define V9FS_REMAP_INODES 0x00000200 +#define V9FS_FORBID_MULTIDEVS 0x00000400 +/* + * Disables certain performance warnings from being logged on host side. + */ +#define V9FS_NO_PERF_WARN 0x00000800 #define V9FS_SEC_MASK 0x0000003C typedef struct FileOperations FileOperations; +typedef struct XattrOperations XattrOperations; + /* * Structure to store the various fsdev's passed through command line. */ @@ -73,32 +83,37 @@ typedef struct FsDriverEntry { char *path; int export_flags; FileOperations *ops; + FsThrottle fst; + mode_t fmode; + mode_t dmode; } FsDriverEntry; -typedef struct FsContext -{ +struct FsContext { uid_t uid; char *fs_root; int export_flags; - struct xattr_operations **xops; - struct extended_ops exops; + XattrOperations **xops; + ExtendedOps exops; + FsThrottle *fst; /* fs driver specific data */ void *private; -} FsContext; + mode_t fmode; + mode_t dmode; +}; -typedef struct V9fsPath { +struct V9fsPath { uint16_t size; char *data; -} V9fsPath; +}; typedef union V9fsFidOpenState V9fsFidOpenState; void cred_init(FsCred *); -struct FileOperations -{ - int (*parse_opts)(QemuOpts *, struct FsDriverEntry *); - int (*init)(struct FsContext *); +struct FileOperations { + int (*parse_opts)(QemuOpts *, FsDriverEntry *, Error **errp); + int (*init)(FsContext *, Error **errp); + void (*cleanup)(FsContext *); int (*lstat)(FsContext *, V9fsPath *, struct stat *); ssize_t (*readlink)(FsContext *, V9fsPath *, char *, size_t); int (*chmod)(FsContext *, V9fsPath *, FsCred *); @@ -118,8 +133,7 @@ struct FileOperations int, FsCred *, V9fsFidOpenState *); void (*rewinddir)(FsContext *, V9fsFidOpenState *); off_t (*telldir)(FsContext *, V9fsFidOpenState *); - int (*readdir_r)(FsContext *, V9fsFidOpenState *, - struct dirent *, struct dirent **); + struct dirent * (*readdir)(FsContext *, V9fsFidOpenState *); void (*seekdir)(FsContext *, V9fsFidOpenState *, off_t); ssize_t (*preadv)(FsContext *, V9fsFidOpenState *, const struct iovec *, int, off_t); @@ -141,7 +155,6 @@ struct FileOperations int (*renameat)(FsContext *ctx, V9fsPath *olddir, const char *old_name, V9fsPath *newdir, const char *new_name); int (*unlinkat)(FsContext *ctx, V9fsPath *dir, const char *name, int flags); - void *opaque; }; #endif