Skip to content

Commit

Permalink
Update kernel interface to 7.9
Browse files Browse the repository at this point in the history
  • Loading branch information
szmi committed Feb 8, 2008
1 parent 3082369 commit b20d88b
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 3 deletions.
2 changes: 2 additions & 0 deletions ChangeLog
Expand Up @@ -4,6 +4,8 @@

* fusexmp_fh: avoid unnecessary seeking in readdir

* Update kernel interface to 7.9

2008-02-03 Csaba Henk <csaba.henk@creo.hu>

* lib/mount_bsd.c:
Expand Down
68 changes: 66 additions & 2 deletions kernel/fuse_kernel.h
Expand Up @@ -32,6 +32,19 @@
SUCH DAMAGE.
*/

/*
* This file defines the kernel interface of FUSE
*
* Protocol changelog:
*
* 7.9:
* - new fuse_getattr_in input argument of GETATTR
* - add lk_flags in fuse_lk_in
* - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
* - add blksize field to fuse_attr
* - add file flags field to fuse_read_in and fuse_write_in
*/

#ifndef linux
#include <sys/types.h>
#define __u64 uint64_t
Expand All @@ -46,7 +59,7 @@
#define FUSE_KERNEL_VERSION 7

/** Minor version number of this interface */
#define FUSE_KERNEL_MINOR_VERSION 8
#define FUSE_KERNEL_MINOR_VERSION 9

/** The node ID of the root inode */
#define FUSE_ROOT_ID 1
Expand Down Expand Up @@ -75,6 +88,8 @@ struct fuse_attr {
__u32 uid;
__u32 gid;
__u32 rdev;
__u32 blksize;
__u32 padding;
};

struct fuse_kstatfs {
Expand Down Expand Up @@ -107,6 +122,9 @@ struct fuse_file_lock {
#define FATTR_ATIME (1 << 4)
#define FATTR_MTIME (1 << 5)
#define FATTR_FH (1 << 6)
#define FATTR_ATIME_NOW (1 << 7)
#define FATTR_MTIME_NOW (1 << 8)
#define FATTR_LOCKOWNER (1 << 9)

/**
* Flags returned by the OPEN request
Expand All @@ -122,12 +140,38 @@ struct fuse_file_lock {
*/
#define FUSE_ASYNC_READ (1 << 0)
#define FUSE_POSIX_LOCKS (1 << 1)
#define FUSE_FILE_OPS (1 << 2)
#define FUSE_ATOMIC_O_TRUNC (1 << 3)

/**
* Release flags
*/
#define FUSE_RELEASE_FLUSH (1 << 0)

/**
* Getattr flags
*/
#define FUSE_GETATTR_FH (1 << 0)

/**
* Lock flags
*/
#define FUSE_LK_FLOCK (1 << 0)

/**
* WRITE flags
*
* FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
* FUSE_WRITE_LOCKOWNER: lock_owner field is valid
*/
#define FUSE_WRITE_CACHE (1 << 0)
#define FUSE_WRITE_LOCKOWNER (1 << 1)

/**
* Read flags
*/
#define FUSE_READ_LOCKOWNER (1 << 1)

enum fuse_opcode {
FUSE_LOOKUP = 1,
FUSE_FORGET = 2, /* no reply */
Expand Down Expand Up @@ -170,6 +214,8 @@ enum fuse_opcode {
/* The read buffer is required to be at least 8k, but may be much larger */
#define FUSE_MIN_READ_BUFFER 8192

#define FUSE_COMPAT_ENTRY_OUT_SIZE 120

struct fuse_entry_out {
__u64 nodeid; /* Inode ID */
__u64 generation; /* Inode generation: nodeid:gen must
Expand All @@ -185,6 +231,14 @@ struct fuse_forget_in {
__u64 nlookup;
};

struct fuse_getattr_in {
__u32 getattr_flags;
__u32 dummy;
__u64 fh;
};

#define FUSE_COMPAT_ATTR_OUT_SIZE 96

struct fuse_attr_out {
__u64 attr_valid; /* Cache timeout for the attributes */
__u32 attr_valid_nsec;
Expand Down Expand Up @@ -215,7 +269,7 @@ struct fuse_setattr_in {
__u32 padding;
__u64 fh;
__u64 size;
__u64 unused1;
__u64 lock_owner;
__u64 atime;
__u64 mtime;
__u64 unused2;
Expand Down Expand Up @@ -258,14 +312,22 @@ struct fuse_read_in {
__u64 fh;
__u64 offset;
__u32 size;
__u32 read_flags;
__u64 lock_owner;
__u32 flags;
__u32 padding;
};

#define FUSE_COMPAT_WRITE_IN_SIZE 24

struct fuse_write_in {
__u64 fh;
__u64 offset;
__u32 size;
__u32 write_flags;
__u64 lock_owner;
__u32 flags;
__u32 padding;
};

struct fuse_write_out {
Expand Down Expand Up @@ -304,6 +366,8 @@ struct fuse_lk_in {
__u64 fh;
__u64 owner;
struct fuse_file_lock lk;
__u32 lk_flags;
__u32 padding;
};

struct fuse_lk_out {
Expand Down
8 changes: 7 additions & 1 deletion lib/fuse_lowlevel.c
Expand Up @@ -629,14 +629,20 @@ static void do_write(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
{
struct fuse_write_in *arg = (struct fuse_write_in *) inarg;
struct fuse_file_info fi;
char *param;

memset(&fi, 0, sizeof(fi));
fi.fh = arg->fh;
fi.fh_old = fi.fh;
fi.writepage = arg->write_flags & 1;

if (req->f->conn.proto_minor < 9)
param = ((char *) arg) + FUSE_COMPAT_WRITE_IN_SIZE;
else
param = PARAM(arg);

if (req->f->op.write)
req->f->op.write(req, nodeid, PARAM(arg), arg->size,
req->f->op.write(req, nodeid, param, arg->size,
arg->offset, &fi);
else
fuse_reply_err(req, ENOSYS);
Expand Down

0 comments on commit b20d88b

Please sign in to comment.