SYNOPSIS size[4] Tfsync tag[2] fid[4] datasync[4] size[4] Rfsync tag[2] DESCRIPTION The Tfsync transaction transfers ("flushes") all modified in-core data of file identified by fid to the disk device (or other permanent storage device) where that file resides. If datasync flag is specified data will be fleshed but does not flush modified metadata unless that metadata is needed in order to allow a subsequent data retrieval to be correctly handled. Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
108 lines
3.1 KiB
C
108 lines
3.1 KiB
C
/*
|
|
* Virtio 9p
|
|
*
|
|
* Copyright IBM, Corp. 2010
|
|
*
|
|
* Authors:
|
|
* Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
|
* the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
#ifndef _FILEOP_H
|
|
#define _FILEOP_H
|
|
#include <sys/types.h>
|
|
#include <dirent.h>
|
|
#include <sys/time.h>
|
|
#include <utime.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/uio.h>
|
|
#include <sys/vfs.h>
|
|
#define SM_LOCAL_MODE_BITS 0600
|
|
#define SM_LOCAL_DIR_MODE_BITS 0700
|
|
|
|
typedef enum
|
|
{
|
|
/*
|
|
* Server will try to set uid/gid.
|
|
* On failure ignore the error.
|
|
*/
|
|
SM_NONE = 0,
|
|
/*
|
|
* uid/gid set on fileserver files
|
|
*/
|
|
SM_PASSTHROUGH = 1,
|
|
/*
|
|
* uid/gid part of xattr
|
|
*/
|
|
SM_MAPPED,
|
|
} SecModel;
|
|
|
|
typedef struct FsCred
|
|
{
|
|
uid_t fc_uid;
|
|
gid_t fc_gid;
|
|
mode_t fc_mode;
|
|
dev_t fc_rdev;
|
|
} FsCred;
|
|
|
|
struct xattr_operations;
|
|
|
|
typedef struct FsContext
|
|
{
|
|
char *fs_root;
|
|
SecModel fs_sm;
|
|
uid_t uid;
|
|
struct xattr_operations **xops;
|
|
} FsContext;
|
|
|
|
extern void cred_init(FsCred *);
|
|
|
|
typedef struct FileOperations
|
|
{
|
|
int (*lstat)(FsContext *, const char *, struct stat *);
|
|
ssize_t (*readlink)(FsContext *, const char *, char *, size_t);
|
|
int (*chmod)(FsContext *, const char *, FsCred *);
|
|
int (*chown)(FsContext *, const char *, FsCred *);
|
|
int (*mknod)(FsContext *, const char *, FsCred *);
|
|
int (*utimensat)(FsContext *, const char *, const struct timespec *);
|
|
int (*remove)(FsContext *, const char *);
|
|
int (*symlink)(FsContext *, const char *, const char *, FsCred *);
|
|
int (*link)(FsContext *, const char *, const char *);
|
|
int (*setuid)(FsContext *, uid_t);
|
|
int (*close)(FsContext *, int);
|
|
int (*closedir)(FsContext *, DIR *);
|
|
DIR *(*opendir)(FsContext *, const char *);
|
|
int (*open)(FsContext *, const char *, int);
|
|
int (*open2)(FsContext *, const char *, int, FsCred *);
|
|
void (*rewinddir)(FsContext *, DIR *);
|
|
off_t (*telldir)(FsContext *, DIR *);
|
|
struct dirent *(*readdir)(FsContext *, DIR *);
|
|
void (*seekdir)(FsContext *, DIR *, off_t);
|
|
ssize_t (*preadv)(FsContext *, int, const struct iovec *, int, off_t);
|
|
ssize_t (*pwritev)(FsContext *, int, const struct iovec *, int, off_t);
|
|
int (*mkdir)(FsContext *, const char *, FsCred *);
|
|
int (*fstat)(FsContext *, int, struct stat *);
|
|
int (*rename)(FsContext *, const char *, const char *);
|
|
int (*truncate)(FsContext *, const char *, off_t);
|
|
int (*fsync)(FsContext *, int, int);
|
|
int (*statfs)(FsContext *s, const char *path, struct statfs *stbuf);
|
|
ssize_t (*lgetxattr)(FsContext *, const char *,
|
|
const char *, void *, size_t);
|
|
ssize_t (*llistxattr)(FsContext *, const char *, void *, size_t);
|
|
int (*lsetxattr)(FsContext *, const char *,
|
|
const char *, void *, size_t, int);
|
|
int (*lremovexattr)(FsContext *, const char *, const char *);
|
|
void *opaque;
|
|
} FileOperations;
|
|
|
|
static inline const char *rpath(FsContext *ctx, const char *path)
|
|
{
|
|
/* FIXME: so wrong... */
|
|
static char buffer[4096];
|
|
snprintf(buffer, sizeof(buffer), "%s/%s", ctx->fs_root, path);
|
|
return buffer;
|
|
}
|
|
#endif
|