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>
This commit is contained in:
Brian Foster 2013-08-02 13:07:17 -04:00 committed by Anand Avati
parent 8c1304b035
commit dc72dd5a76
2 changed files with 46 additions and 2 deletions

View File

@ -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;

View File

@ -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