|
@ -38,12 +38,50 @@ |
|
|
* |
|
|
* |
|
|
* Protocol changelog: |
|
|
* Protocol changelog: |
|
|
* |
|
|
* |
|
|
|
|
|
* 7.1: |
|
|
|
|
|
* - add the following messages: |
|
|
|
|
|
* FUSE_SETATTR, FUSE_SYMLINK, FUSE_MKNOD, FUSE_MKDIR, FUSE_UNLINK, |
|
|
|
|
|
* FUSE_RMDIR, FUSE_RENAME, FUSE_LINK, FUSE_OPEN, FUSE_READ, FUSE_WRITE, |
|
|
|
|
|
* FUSE_RELEASE, FUSE_FSYNC, FUSE_FLUSH, FUSE_SETXATTR, FUSE_GETXATTR, |
|
|
|
|
|
* FUSE_LISTXATTR, FUSE_REMOVEXATTR, FUSE_OPENDIR, FUSE_READDIR, |
|
|
|
|
|
* FUSE_RELEASEDIR |
|
|
|
|
|
* - add padding to messages to accommodate 32-bit servers on 64-bit kernels |
|
|
|
|
|
* |
|
|
|
|
|
* 7.2: |
|
|
|
|
|
* - add FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE flags |
|
|
|
|
|
* - add FUSE_FSYNCDIR message |
|
|
|
|
|
* |
|
|
|
|
|
* 7.3: |
|
|
|
|
|
* - add FUSE_ACCESS message |
|
|
|
|
|
* - add FUSE_CREATE message |
|
|
|
|
|
* - add filehandle to fuse_setattr_in |
|
|
|
|
|
* |
|
|
|
|
|
* 7.4: |
|
|
|
|
|
* - add frsize to fuse_kstatfs |
|
|
|
|
|
* - clean up request size limit checking |
|
|
|
|
|
* |
|
|
|
|
|
* 7.5: |
|
|
|
|
|
* - add flags and max_write to fuse_init_out |
|
|
|
|
|
* |
|
|
|
|
|
* 7.6: |
|
|
|
|
|
* - add max_readahead to fuse_init_in and fuse_init_out |
|
|
|
|
|
* |
|
|
|
|
|
* 7.7: |
|
|
|
|
|
* - add FUSE_INTERRUPT message |
|
|
|
|
|
* - add POSIX file lock support |
|
|
|
|
|
* |
|
|
|
|
|
* 7.8: |
|
|
|
|
|
* - add lock_owner and flags fields to fuse_release_in |
|
|
|
|
|
* - add FUSE_BMAP message |
|
|
|
|
|
* - add FUSE_DESTROY message |
|
|
|
|
|
* |
|
|
* 7.9: |
|
|
* 7.9: |
|
|
* - new fuse_getattr_in input argument of GETATTR |
|
|
* - new fuse_getattr_in input argument of GETATTR |
|
|
* - add lk_flags in fuse_lk_in |
|
|
* - add lk_flags in fuse_lk_in |
|
|
* - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in |
|
|
* - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in |
|
|
* - add blksize field to fuse_attr |
|
|
* - add blksize field to fuse_attr |
|
|
* - add file flags field to fuse_read_in and fuse_write_in |
|
|
* - add file flags field to fuse_read_in and fuse_write_in |
|
|
|
|
|
* - Add ATIME_NOW and MTIME_NOW flags to fuse_setattr_in |
|
|
* |
|
|
* |
|
|
* 7.10 |
|
|
* 7.10 |
|
|
* - add nonseekable open flag |
|
|
* - add nonseekable open flag |
|
@ -54,7 +92,7 @@ |
|
|
* - add POLL message and NOTIFY_POLL notification |
|
|
* - add POLL message and NOTIFY_POLL notification |
|
|
* |
|
|
* |
|
|
* 7.12 |
|
|
* 7.12 |
|
|
* - add umask flag to input argument of open, mknod and mkdir |
|
|
|
|
|
|
|
|
* - add umask flag to input argument of create, mknod and mkdir |
|
|
* - add notification messages for invalidation of inodes and |
|
|
* - add notification messages for invalidation of inodes and |
|
|
* directory entries |
|
|
* directory entries |
|
|
* |
|
|
* |
|
@ -125,6 +163,15 @@ |
|
|
* |
|
|
* |
|
|
* 7.29 |
|
|
* 7.29 |
|
|
* - add FUSE_NO_OPENDIR_SUPPORT flag |
|
|
* - add FUSE_NO_OPENDIR_SUPPORT flag |
|
|
|
|
|
* |
|
|
|
|
|
* 7.30 |
|
|
|
|
|
* - add FUSE_EXPLICIT_INVAL_DATA |
|
|
|
|
|
* - add FUSE_IOCTL_COMPAT_X32 |
|
|
|
|
|
* |
|
|
|
|
|
* 7.31 |
|
|
|
|
|
* - add FUSE_WRITE_KILL_PRIV flag |
|
|
|
|
|
* - add FUSE_SETUPMAPPING and FUSE_REMOVEMAPPING |
|
|
|
|
|
* - add map_alignment to fuse_init_out, add FUSE_MAP_ALIGNMENT flag |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
#ifndef _LINUX_FUSE_H |
|
|
#ifndef _LINUX_FUSE_H |
|
@ -160,7 +207,7 @@ |
|
|
#define FUSE_KERNEL_VERSION 7 |
|
|
#define FUSE_KERNEL_VERSION 7 |
|
|
|
|
|
|
|
|
/** Minor version number of this interface */ |
|
|
/** Minor version number of this interface */ |
|
|
#define FUSE_KERNEL_MINOR_VERSION 29 |
|
|
|
|
|
|
|
|
#define FUSE_KERNEL_MINOR_VERSION 31 |
|
|
|
|
|
|
|
|
/** The node ID of the root inode */ |
|
|
/** The node ID of the root inode */ |
|
|
#define FUSE_ROOT_ID 1 |
|
|
#define FUSE_ROOT_ID 1 |
|
@ -229,11 +276,13 @@ struct fuse_file_lock { |
|
|
* FOPEN_KEEP_CACHE: don't invalidate the data cache on open |
|
|
* FOPEN_KEEP_CACHE: don't invalidate the data cache on open |
|
|
* FOPEN_NONSEEKABLE: the file is not seekable |
|
|
* FOPEN_NONSEEKABLE: the file is not seekable |
|
|
* FOPEN_CACHE_DIR: allow caching this directory |
|
|
* FOPEN_CACHE_DIR: allow caching this directory |
|
|
|
|
|
* FOPEN_STREAM: the file is stream-like (no file position at all) |
|
|
*/ |
|
|
*/ |
|
|
#define FOPEN_DIRECT_IO (1 << 0) |
|
|
#define FOPEN_DIRECT_IO (1 << 0) |
|
|
#define FOPEN_KEEP_CACHE (1 << 1) |
|
|
#define FOPEN_KEEP_CACHE (1 << 1) |
|
|
#define FOPEN_NONSEEKABLE (1 << 2) |
|
|
#define FOPEN_NONSEEKABLE (1 << 2) |
|
|
#define FOPEN_CACHE_DIR (1 << 3) |
|
|
#define FOPEN_CACHE_DIR (1 << 3) |
|
|
|
|
|
#define FOPEN_STREAM (1 << 4) |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* INIT request/reply flags |
|
|
* INIT request/reply flags |
|
@ -263,6 +312,8 @@ struct fuse_file_lock { |
|
|
* FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages |
|
|
* FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages |
|
|
* FUSE_CACHE_SYMLINKS: cache READLINK responses |
|
|
* FUSE_CACHE_SYMLINKS: cache READLINK responses |
|
|
* FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir |
|
|
* FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir |
|
|
|
|
|
* FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request |
|
|
|
|
|
* FUSE_MAP_ALIGNMENT: map_alignment field is valid |
|
|
*/ |
|
|
*/ |
|
|
#define FUSE_ASYNC_READ (1 << 0) |
|
|
#define FUSE_ASYNC_READ (1 << 0) |
|
|
#define FUSE_POSIX_LOCKS (1 << 1) |
|
|
#define FUSE_POSIX_LOCKS (1 << 1) |
|
@ -289,6 +340,8 @@ struct fuse_file_lock { |
|
|
#define FUSE_MAX_PAGES (1 << 22) |
|
|
#define FUSE_MAX_PAGES (1 << 22) |
|
|
#define FUSE_CACHE_SYMLINKS (1 << 23) |
|
|
#define FUSE_CACHE_SYMLINKS (1 << 23) |
|
|
#define FUSE_NO_OPENDIR_SUPPORT (1 << 24) |
|
|
#define FUSE_NO_OPENDIR_SUPPORT (1 << 24) |
|
|
|
|
|
#define FUSE_EXPLICIT_INVAL_DATA (1 << 25) |
|
|
|
|
|
#define FUSE_MAP_ALIGNMENT (1 << 26) |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* CUSE INIT request/reply flags |
|
|
* CUSE INIT request/reply flags |
|
@ -318,9 +371,11 @@ struct fuse_file_lock { |
|
|
* |
|
|
* |
|
|
* FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed |
|
|
* FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed |
|
|
* FUSE_WRITE_LOCKOWNER: lock_owner field is valid |
|
|
* FUSE_WRITE_LOCKOWNER: lock_owner field is valid |
|
|
|
|
|
* FUSE_WRITE_KILL_PRIV: kill suid and sgid bits |
|
|
*/ |
|
|
*/ |
|
|
#define FUSE_WRITE_CACHE (1 << 0) |
|
|
#define FUSE_WRITE_CACHE (1 << 0) |
|
|
#define FUSE_WRITE_LOCKOWNER (1 << 1) |
|
|
#define FUSE_WRITE_LOCKOWNER (1 << 1) |
|
|
|
|
|
#define FUSE_WRITE_KILL_PRIV (1 << 2) |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Read flags |
|
|
* Read flags |
|
@ -335,6 +390,7 @@ struct fuse_file_lock { |
|
|
* FUSE_IOCTL_RETRY: retry with new iovecs |
|
|
* FUSE_IOCTL_RETRY: retry with new iovecs |
|
|
* FUSE_IOCTL_32BIT: 32bit ioctl |
|
|
* FUSE_IOCTL_32BIT: 32bit ioctl |
|
|
* FUSE_IOCTL_DIR: is a directory |
|
|
* FUSE_IOCTL_DIR: is a directory |
|
|
|
|
|
* FUSE_IOCTL_COMPAT_X32: x32 compat ioctl on 64bit machine (64bit time_t) |
|
|
* |
|
|
* |
|
|
* FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs |
|
|
* FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs |
|
|
*/ |
|
|
*/ |
|
@ -343,6 +399,7 @@ struct fuse_file_lock { |
|
|
#define FUSE_IOCTL_RETRY (1 << 2) |
|
|
#define FUSE_IOCTL_RETRY (1 << 2) |
|
|
#define FUSE_IOCTL_32BIT (1 << 3) |
|
|
#define FUSE_IOCTL_32BIT (1 << 3) |
|
|
#define FUSE_IOCTL_DIR (1 << 4) |
|
|
#define FUSE_IOCTL_DIR (1 << 4) |
|
|
|
|
|
#define FUSE_IOCTL_COMPAT_X32 (1 << 5) |
|
|
|
|
|
|
|
|
#define FUSE_IOCTL_MAX_IOV 256 |
|
|
#define FUSE_IOCTL_MAX_IOV 256 |
|
|
|
|
|
|
|
@ -353,6 +410,13 @@ struct fuse_file_lock { |
|
|
*/ |
|
|
*/ |
|
|
#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) |
|
|
#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Fsync flags |
|
|
|
|
|
* |
|
|
|
|
|
* FUSE_FSYNC_FDATASYNC: Sync data only, not metadata |
|
|
|
|
|
*/ |
|
|
|
|
|
#define FUSE_FSYNC_FDATASYNC (1 << 0) |
|
|
|
|
|
|
|
|
enum fuse_opcode { |
|
|
enum fuse_opcode { |
|
|
FUSE_LOOKUP = 1, |
|
|
FUSE_LOOKUP = 1, |
|
|
FUSE_FORGET = 2, /* no reply */ |
|
|
FUSE_FORGET = 2, /* no reply */ |
|
@ -399,9 +463,15 @@ enum fuse_opcode { |
|
|
FUSE_RENAME2 = 45, |
|
|
FUSE_RENAME2 = 45, |
|
|
FUSE_LSEEK = 46, |
|
|
FUSE_LSEEK = 46, |
|
|
FUSE_COPY_FILE_RANGE = 47, |
|
|
FUSE_COPY_FILE_RANGE = 47, |
|
|
|
|
|
FUSE_SETUPMAPPING = 48, |
|
|
|
|
|
FUSE_REMOVEMAPPING = 49, |
|
|
|
|
|
|
|
|
/* CUSE specific operations */ |
|
|
/* CUSE specific operations */ |
|
|
CUSE_INIT = 4096, |
|
|
CUSE_INIT = 4096, |
|
|
|
|
|
|
|
|
|
|
|
/* Reserved opcodes: helpful to detect structure endian-ness */ |
|
|
|
|
|
CUSE_INIT_BSWAP_RESERVED = 1048576, /* CUSE_INIT << 8 */ |
|
|
|
|
|
FUSE_INIT_BSWAP_RESERVED = 436207616, /* FUSE_INIT << 24 */ |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
enum fuse_notify_code { |
|
|
enum fuse_notify_code { |
|
@ -629,7 +699,7 @@ struct fuse_init_out { |
|
|
uint32_t max_write; |
|
|
uint32_t max_write; |
|
|
uint32_t time_gran; |
|
|
uint32_t time_gran; |
|
|
uint16_t max_pages; |
|
|
uint16_t max_pages; |
|
|
uint16_t padding; |
|
|
|
|
|
|
|
|
uint16_t map_alignment; |
|
|
uint32_t unused[8]; |
|
|
uint32_t unused[8]; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|