diff options
| author | Brian Foster <bfoster@redhat.com> | 2013-08-02 13:07:17 -0400 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2013-08-03 05:48:44 -0700 | 
| commit | dc72dd5a7637c778f345df962f63aaee509d0e12 (patch) | |
| tree | 657c1e58a3415cd13435c564e3dd7f9ced052c3e | |
| parent | 8c1304b03542eefbbff82014827fc782c3c3584f (diff) | |
fuse-bridge: update to protocol minor version 22
7.17
- Distinguishes between POSIX and BSD locking support via a
  separate BSD locking support init flag. Older protocol versions
  (since BSD support was added) export both types of locking
  requests if FUSE_POSIX_LOCKS is specified. Gluster sets this
  flag, so set FUSE_FLOCK_LOCKS as well on kernels that support
  version 17 or newer.
7.18
- Adds ioctl() support for directories (and the associated
  FUSE_IOCTL_DIR flag). Gluster does not support the ioctl
  request, so no changes are required. Update the header.
- Adds support for the delete notification to allow a filesystem
  to inform the kernel of a deleted inode. No gluster changes
  required.
7.19
- Adds support for the fallocate request. Gluster already supports
  fallocate and includes the request opcode definition and data
  structure. Update the header version number.
7.20
- Adds the FUSE_AUTO_INVAL_DATA init flag to enable attribute
  updates on reads and automatic cache invalidation on mtime
  changes. Behavior does not change unless the init flag is
  specified, no gluster changes required. Update header.
7.21
- Adds readdirplus support and updates the poll request to include
  events. Gluster already supports readdirplus and includes the
  relevant data structures. Poll is not supported, so no changes
  are required. Update the header with some missing
  READDIRPLUS_AUTO bits.
7.22
- Adds real asynchronous direct I/O support. Gluster already
  supports/enables the associated bit (FUSE_ASYNC_DIO), no further
  changes are required. Update the header.
BUG: 990744
Change-Id: Idf6fd75bbd48189587e548f7624626f9a75309e8
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-on: http://review.gluster.org/5489
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
| -rw-r--r-- | contrib/fuse-include/fuse_kernel.h | 44 | ||||
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 4 | 
2 files changed, 46 insertions, 2 deletions
diff --git a/contrib/fuse-include/fuse_kernel.h b/contrib/fuse-include/fuse_kernel.h index ac6a11af83b..edfe63f9dc6 100644 --- a/contrib/fuse-include/fuse_kernel.h +++ b/contrib/fuse-include/fuse_kernel.h @@ -73,6 +73,26 @@   *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct   *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'   *  - add FUSE_IOCTL_32BIT flag + * + * 7.17 + *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK + * + * 7.18 + *  - add FUSE_IOCTL_DIR flag + *  - add FUSE_NOTIFY_DELETE + * + * 7.19 + *  - add FUSE_FALLOCATE + * + * 7.20 + *  - add FUSE_AUTO_INVAL_DATA + * + * 7.21 + *  - add FUSE_READDIRPLUS + *  - send the requested events in POLL request + * + * 7.22 + *  - add FUSE_ASYNC_DIO   */  #ifndef _LINUX_FUSE_H @@ -89,7 +109,7 @@  #define FUSE_KERNEL_VERSION 7  /** Minor version number of this interface */ -#define FUSE_KERNEL_MINOR_VERSION 16 +#define FUSE_KERNEL_MINOR_VERSION 22  /** The node ID of the root inode */  #define FUSE_ROOT_ID 1 @@ -164,8 +184,14 @@ struct fuse_file_lock {  /**   * INIT request/reply flags   * + * FUSE_POSIX_LOCKS: remote locking for POSIX file locks   * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."   * FUSE_DONT_MASK: don't apply umask to file mode on create operations + * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks + * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages + * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one) + * FUSE_READDIRPLUS_AUTO: adaptive readdirplus + * FUSE_ASYNC_DIO: asynchronous direct I/O submission   */  #define FUSE_ASYNC_READ		(1 << 0)  #define FUSE_POSIX_LOCKS	(1 << 1) @@ -174,7 +200,10 @@ struct fuse_file_lock {  #define FUSE_EXPORT_SUPPORT	(1 << 4)  #define FUSE_BIG_WRITES		(1 << 5)  #define FUSE_DONT_MASK		(1 << 6) +#define FUSE_FLOCK_LOCKS	(1 << 10) +#define FUSE_AUTO_INVAL_DATA	(1 << 12)  #define FUSE_DO_READDIRPLUS	(1 << 13) +#define FUSE_READDIRPLUS_AUTO   (1 << 14)  #define FUSE_ASYNC_DIO		(1 << 15)  /** @@ -188,6 +217,7 @@ struct fuse_file_lock {   * Release flags   */  #define FUSE_RELEASE_FLUSH	(1 << 0) +#define FUSE_RELEASE_FLOCK_UNLOCK	(1 << 1)  /**   * Getattr flags @@ -220,6 +250,7 @@ struct fuse_file_lock {   * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed   * FUSE_IOCTL_RETRY: retry with new iovecs   * FUSE_IOCTL_32BIT: 32bit ioctl + * FUSE_IOCTL_DIR: is a directory   *   * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs   */ @@ -227,6 +258,7 @@ struct fuse_file_lock {  #define FUSE_IOCTL_UNRESTRICTED	(1 << 1)  #define FUSE_IOCTL_RETRY	(1 << 2)  #define FUSE_IOCTL_32BIT       (1 << 3) +#define FUSE_IOCTL_DIR		(1 << 4)  #define FUSE_IOCTL_MAX_IOV	256 @@ -290,6 +322,7 @@ enum fuse_notify_code {  	FUSE_NOTIFY_INVAL_ENTRY = 3,  	FUSE_NOTIFY_STORE = 4,  	FUSE_NOTIFY_RETRIEVE = 5, +	FUSE_NOTIFY_DELETE = 6,  	FUSE_NOTIFY_CODE_MAX,  }; @@ -559,7 +592,7 @@ struct fuse_poll_in {  	__u64	fh;  	__u64	kh;  	__u32	flags; -	__u32   padding; +	__u32	events;  };  struct fuse_poll_out { @@ -631,6 +664,13 @@ struct fuse_notify_inval_entry_out {  	__u32	padding;  }; +struct fuse_notify_delete_out { +	__u64	parent; +	__u64	child; +	__u32	namelen; +	__u32	padding; +}; +  struct fuse_notify_store_out {  	__u64	nodeid;  	__u64	offset; diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 945222e93a8..5f25260b6f9 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -4633,6 +4633,10 @@ fuse_init (xlator_t *this, fuse_in_header_t *finh, void *msg)          fino.max_readahead = 1 << 17;          fino.max_write = 1 << 17;          fino.flags = FUSE_ASYNC_READ | FUSE_POSIX_LOCKS; +#if FUSE_KERNEL_MINOR_VERSION >= 17 +	if (fini->minor >= 17) +		fino.flags |= FUSE_FLOCK_LOCKS; +#endif  #if FUSE_KERNEL_MINOR_VERSION >= 12          if (fini->minor >= 12) {              /* let fuse leave the umask processing to us, so that it does not  | 
