199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/*
299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    This file defines the kernel interface of FUSE
399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    This program can be distributed under the terms of the GNU GPL.
699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    See the file COPYING.
799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    This -- and only this -- header file may also be distributed under
999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    the terms of the BSD Licence as follows:
1099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
1199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
1299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
1399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    Redistribution and use in source and binary forms, with or without
1499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    modification, are permitted provided that the following conditions
1599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    are met:
1699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    1. Redistributions of source code must retain the above copyright
1799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel       notice, this list of conditions and the following disclaimer.
1899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    2. Redistributions in binary form must reproduce the above copyright
1999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel       notice, this list of conditions and the following disclaimer in the
2099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel       documentation and/or other materials provided with the distribution.
2199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
2299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
2399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
2699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel    SUCH DAMAGE.
3399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel*/
3499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
3599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/*
3699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * This file defines the kernel interface of FUSE
3799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
3899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Protocol changelog:
3999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
4099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.9:
4199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - new fuse_getattr_in input argument of GETATTR
4299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add lk_flags in fuse_lk_in
4399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
4499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add blksize field to fuse_attr
4599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add file flags field to fuse_read_in and fuse_write_in
4699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
4799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.10
4899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add nonseekable open flag
4999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
5099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.11
5199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add IOCTL message
5299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add unsolicited notification support
5399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add POLL message and NOTIFY_POLL notification
5499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
5599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.12
5699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add umask flag to input argument of open, mknod and mkdir
5799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add notification messages for invalidation of inodes and
5899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *    directory entries
5999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
6099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.13
6199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - make max number of background requests and congestion threshold
6299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *    tunables
6399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
6499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.14
6599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add splice support to fuse device
6699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
6799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.15
6899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add store notify
6999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add retrieve notify
7099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
7199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.16
7299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add BATCH_FORGET request
7399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
7499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
7599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_IOCTL_32BIT flag
7699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
7799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.17
7899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
7999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
8099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.18
8199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_IOCTL_DIR flag
8299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_NOTIFY_DELETE
8399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
8499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.19
8599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_FALLOCATE
8699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
8799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.20
8899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_AUTO_INVAL_DATA
8999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
9099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.21
9199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_READDIRPLUS
9299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - send the requested events in POLL request
9399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
9499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.22
9599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_ASYNC_DIO
9699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
9799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * 7.23
9899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *  - add FUSE_WRITEBACK_CACHE
9999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
10099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
10199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#ifndef _LINUX_FUSE_H
10299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define _LINUX_FUSE_H
10399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
1049cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser#ifdef __KERNEL__
1059cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser#include <linux/types.h>
1069cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser#else
10799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#include <stdint.h>
1089cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser#endif
10999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
11099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/*
11199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Version negotiation:
11299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
11399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Both the kernel and userspace send the version they support in the
11499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * INIT request and reply respectively.
11599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
11699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * If the major versions match then both shall use the smallest
11799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * of the two minor versions for communication.
11899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
11999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * If the kernel supports a larger major version, then userspace shall
12099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * reply with the major version it supports, ignore the rest of the
12199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * INIT message and expect a new INIT message from the kernel with a
12299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * matching major version.
12399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
12499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * If the library supports a larger major version, then it shall fall
12599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * back to the major protocol version sent by the kernel for
12699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * communication and reply with that major version (and an arbitrary
12799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * supported minor version).
12899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
12999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
13099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/** Version number of this interface */
13199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_KERNEL_VERSION 7
13299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
13399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/** Minor version number of this interface */
13499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_KERNEL_MINOR_VERSION 23
13599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
13699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/** The node ID of the root inode */
13799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_ROOT_ID 1
13899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
13999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/* Make sure all structures are padded to 64bit boundary, so 32bit
14099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel   userspace works under 64bit kernels */
14199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
14299fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_attr {
14399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	ino;
14499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	size;
14599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	blocks;
14699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	atime;
14799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	mtime;
14899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	ctime;
14999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	atimensec;
15099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mtimensec;
15199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	ctimensec;
15299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mode;
15399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	nlink;
15499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	uid;
15599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	gid;
15699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	rdev;
15799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	blksize;
15899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
15999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
16099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
16199fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_kstatfs {
16299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	blocks;
16399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	bfree;
16499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	bavail;
16599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	files;
16699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	ffree;
16799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	bsize;
16899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	namelen;
16999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	frsize;
17099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
17199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	spare[6];
17299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
17399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
17499fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_file_lock {
17599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	start;
17699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	end;
17799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	type;
17899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	pid; /* tgid */
17999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
18099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
18199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
18299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Bitmasks for fuse_setattr_in.valid
18399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
18499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_MODE	(1 << 0)
18599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_UID	(1 << 1)
18699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_GID	(1 << 2)
18799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_SIZE	(1 << 3)
18899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_ATIME	(1 << 4)
18999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_MTIME	(1 << 5)
19099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_FH	(1 << 6)
19199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_ATIME_NOW	(1 << 7)
19299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_MTIME_NOW	(1 << 8)
19399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FATTR_LOCKOWNER	(1 << 9)
19499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
19599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
19699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Flags returned by the OPEN request
19799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
19899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FOPEN_DIRECT_IO: bypass page cache for this open file
19999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
20099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FOPEN_NONSEEKABLE: the file is not seekable
20199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
20299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FOPEN_DIRECT_IO		(1 << 0)
20399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FOPEN_KEEP_CACHE	(1 << 1)
20499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FOPEN_NONSEEKABLE	(1 << 2)
20599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
20699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
20799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * INIT request/reply flags
20899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
20999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_ASYNC_READ: asynchronous read requests
21099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
21199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
21299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
21399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
21499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
21599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_DONT_MASK: don't apply umask to file mode on create operations
21699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_SPLICE_WRITE: kernel supports splice write on the device
21799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_SPLICE_MOVE: kernel supports splice move on the device
21899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_SPLICE_READ: kernel supports splice read on the device
21999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
22099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
22199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
22299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
22399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
22499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_ASYNC_DIO: asynchronous direct I/O submission
22599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
22699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
22799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_ASYNC_READ		(1 << 0)
22899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_POSIX_LOCKS	(1 << 1)
22999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_FILE_OPS		(1 << 2)
23099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_ATOMIC_O_TRUNC	(1 << 3)
23199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_EXPORT_SUPPORT	(1 << 4)
23299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_BIG_WRITES		(1 << 5)
23399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_DONT_MASK		(1 << 6)
23499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_SPLICE_WRITE	(1 << 7)
23599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_SPLICE_MOVE	(1 << 8)
23699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_SPLICE_READ	(1 << 9)
23799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_FLOCK_LOCKS	(1 << 10)
23899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_HAS_IOCTL_DIR	(1 << 11)
23999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_AUTO_INVAL_DATA	(1 << 12)
24099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_DO_READDIRPLUS	(1 << 13)
24199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_READDIRPLUS_AUTO	(1 << 14)
24299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_ASYNC_DIO		(1 << 15)
24399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_WRITEBACK_CACHE	(1 << 16)
24499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
2452e26b038942a8c22c2880fef5100f15b37317095Robb Glasser#define FUSE_SHORTCIRCUIT (1 << 31)
2462e26b038942a8c22c2880fef5100f15b37317095Robb Glasser
24799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
24899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * CUSE INIT request/reply flags
24999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
25099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl
25199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
25299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define CUSE_UNRESTRICTED_IOCTL	(1 << 0)
25399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
25499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
25599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Release flags
25699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
25799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_RELEASE_FLUSH	(1 << 0)
25899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_RELEASE_FLOCK_UNLOCK	(1 << 1)
25999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
26099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
26199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Getattr flags
26299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
26399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_GETATTR_FH		(1 << 0)
26499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
26599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
26699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Lock flags
26799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
26899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_LK_FLOCK		(1 << 0)
26999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
27099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
27199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * WRITE flags
27299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
27399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
27499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
27599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
27699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_WRITE_CACHE	(1 << 0)
27799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_WRITE_LOCKOWNER	(1 << 1)
27899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
27999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
28099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Read flags
28199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
28299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_READ_LOCKOWNER	(1 << 1)
28399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
28499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
28599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Ioctl flags
28699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
28799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
28899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
28999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_IOCTL_RETRY: retry with new iovecs
29099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_IOCTL_32BIT: 32bit ioctl
29199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_IOCTL_DIR: is a directory
29299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
29399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
29499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
29599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_IOCTL_COMPAT	(1 << 0)
29699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_IOCTL_UNRESTRICTED	(1 << 1)
29799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_IOCTL_RETRY	(1 << 2)
29899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_IOCTL_32BIT	(1 << 3)
29999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_IOCTL_DIR		(1 << 4)
30099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
30199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_IOCTL_MAX_IOV	256
30299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
30399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/**
30499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * Poll flags
30599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel *
30699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
30799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel */
30899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
30999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
31099fbfc601eea9a971c75066c93823519773bd534Thierry Strudelenum fuse_opcode {
31199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_LOOKUP	   = 1,
31299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_FORGET	   = 2,  /* no reply */
31399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_GETATTR	   = 3,
31499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_SETATTR	   = 4,
31599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_READLINK	   = 5,
31699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_SYMLINK	   = 6,
31799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_MKNOD	   = 8,
31899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_MKDIR	   = 9,
31999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_UNLINK	   = 10,
32099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_RMDIR	   = 11,
32199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_RENAME	   = 12,
32299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_LINK	   = 13,
32399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_OPEN	   = 14,
32499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_READ	   = 15,
32599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_WRITE	   = 16,
32699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_STATFS	   = 17,
32799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_RELEASE       = 18,
32899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_FSYNC         = 20,
32999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_SETXATTR      = 21,
33099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_GETXATTR      = 22,
33199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_LISTXATTR     = 23,
33299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_REMOVEXATTR   = 24,
33399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_FLUSH         = 25,
33499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_INIT          = 26,
33599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_OPENDIR       = 27,
33699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_READDIR       = 28,
33799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_RELEASEDIR    = 29,
33899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_FSYNCDIR      = 30,
33999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_GETLK         = 31,
34099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_SETLK         = 32,
34199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_SETLKW        = 33,
34299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_ACCESS        = 34,
34399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_CREATE        = 35,
34499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_INTERRUPT     = 36,
34599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_BMAP          = 37,
34699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_DESTROY       = 38,
34799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_IOCTL         = 39,
34899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_POLL          = 40,
34999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_REPLY  = 41,
35099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_BATCH_FORGET  = 42,
35199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_FALLOCATE     = 43,
35299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_READDIRPLUS   = 44,
35399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_CANONICAL_PATH= 2016,
35499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
35599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	/* CUSE specific operations */
35699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	CUSE_INIT          = 4096,
35799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
35899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
35999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelenum fuse_notify_code {
36099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_POLL   = 1,
36199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_INVAL_INODE = 2,
36299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_INVAL_ENTRY = 3,
36399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_STORE = 4,
36499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_RETRIEVE = 5,
36599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_DELETE = 6,
36699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_NOTIFY_CODE_MAX,
36799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
36899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
36999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/* The read buffer is required to be at least 8k, but may be much larger */
37099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_MIN_READ_BUFFER 8192
37199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
37299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
37399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
37499fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_entry_out {
37599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	nodeid;		/* Inode ID */
37699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	generation;	/* Inode generation: nodeid:gen must
37799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel					   be unique for the fs's lifetime */
37899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	entry_valid;	/* Cache timeout for the name */
37999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	attr_valid;	/* Cache timeout for the attributes */
38099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	entry_valid_nsec;
38199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	attr_valid_nsec;
38299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	struct fuse_attr attr;
38399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
38499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
38599fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_forget_in {
38699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	nlookup;
38799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
38899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
38999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_forget_one {
39099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	nodeid;
39199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	nlookup;
39299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
39399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
39499fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_batch_forget_in {
39599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	count;
39699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	dummy;
39799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
39899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
39999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_getattr_in {
40099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	getattr_flags;
40199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	dummy;
40299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
40399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
40499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
40599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_COMPAT_ATTR_OUT_SIZE 96
40699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
40799fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_attr_out {
40899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	attr_valid;	/* Cache timeout for the attributes */
40999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	attr_valid_nsec;
41099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	dummy;
41199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	struct fuse_attr attr;
41299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
41399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
41499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_COMPAT_MKNOD_IN_SIZE 8
41599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
41699fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_mknod_in {
41799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mode;
41899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	rdev;
41999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	umask;
42099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
42199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
42299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
42399fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_mkdir_in {
42499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mode;
42599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	umask;
42699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
42799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
42899fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_rename_in {
42999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	newdir;
43099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
43199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
43299fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_link_in {
43399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	oldnodeid;
43499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
43599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
43699fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_setattr_in {
43799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	valid;
43899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
43999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
44099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	size;
44199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	lock_owner;
44299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	atime;
44399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	mtime;
44499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	unused2;
44599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	atimensec;
44699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mtimensec;
44799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	unused3;
44899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mode;
44999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	unused4;
45099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	uid;
45199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	gid;
45299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	unused5;
45399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
45499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
45599fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_open_in {
45699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
45799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	unused;
45899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
45999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
46099fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_create_in {
46199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
46299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mode;
46399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	umask;
46499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
46599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
46699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
46799fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_open_out {
46899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
46999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	open_flags;
4709cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser        union {
4719cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser                int32_t  lower_fd;
4729cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser	        uint32_t padding;
4739cc07e2d7827d9198e123790bd7f873abd59ca9dRobb Glasser        };
47499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
47599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
47699fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_release_in {
47799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
47899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
47999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	release_flags;
48099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	lock_owner;
48199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
48299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
48399fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_flush_in {
48499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
48599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	unused;
48699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
48799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	lock_owner;
48899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
48999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
49099fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_read_in {
49199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
49299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	offset;
49399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
49499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	read_flags;
49599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	lock_owner;
49699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
49799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
49899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
49999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
50099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_COMPAT_WRITE_IN_SIZE 24
50199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
50299fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_write_in {
50399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
50499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	offset;
50599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
50699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	write_flags;
50799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	lock_owner;
50899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
50999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
51099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
51199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
51299fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_write_out {
51399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
51499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
51599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
51699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
51799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_COMPAT_STATFS_SIZE 48
51899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
51999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_statfs_out {
52099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	struct fuse_kstatfs st;
52199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
52299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
52399fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_fsync_in {
52499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
52599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	fsync_flags;
52699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
52799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
52899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
52999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_setxattr_in {
53099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
53199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
53299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
53399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
53499fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_getxattr_in {
53599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
53699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
53799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
53899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
53999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_getxattr_out {
54099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
54199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
54299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
54399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
54499fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_lk_in {
54599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
54699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	owner;
54799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	struct fuse_file_lock lk;
54899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	lk_flags;
54999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
55099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
55199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
55299fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_lk_out {
55399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	struct fuse_file_lock lk;
55499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
55599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
55699fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_access_in {
55799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mask;
55899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
55999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
56099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
56199fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_init_in {
56299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	major;
56399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	minor;
56499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	max_readahead;
56599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
56699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
56799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
56899fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_init_out {
56999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	major;
57099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	minor;
57199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	max_readahead;
57299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
57399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint16_t	max_background;
57499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint16_t	congestion_threshold;
57599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	max_write;
57699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
57799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
57899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define CUSE_INIT_INFO_MAX 4096
57999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
58099fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct cuse_init_in {
58199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	major;
58299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	minor;
58399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	unused;
58499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
58599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
58699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
58799fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct cuse_init_out {
58899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	major;
58999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	minor;
59099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	unused;
59199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
59299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	max_read;
59399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	max_write;
59499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	dev_major;		/* chardev major */
59599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	dev_minor;		/* chardev minor */
59699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	spare[10];
59799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
59899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
59999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_interrupt_in {
60099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	unique;
60199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
60299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
60399fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_bmap_in {
60499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	block;
60599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	blocksize;
60699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
60799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
60899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
60999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_bmap_out {
61099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	block;
61199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
61299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
61399fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_ioctl_in {
61499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
61599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
61699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	cmd;
61799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	arg;
61899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	in_size;
61999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	out_size;
62099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
62199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
62299fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_ioctl_iovec {
62399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	base;
62499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	len;
62599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
62699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
62799fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_ioctl_out {
62899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	int32_t		result;
62999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
63099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	in_iovs;
63199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	out_iovs;
63299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
63399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
63499fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_poll_in {
63599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
63699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	kh;
63799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	flags;
63899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	events;
63999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
64099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
64199fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_poll_out {
64299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	revents;
64399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
64499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
64599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
64699fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_notify_poll_wakeup_out {
64799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	kh;
64899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
64999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
65099fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_fallocate_in {
65199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	fh;
65299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	offset;
65399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	length;
65499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	mode;
65599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
65699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
65799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
65899fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_in_header {
65999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	len;
66099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	opcode;
66199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	unique;
66299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	nodeid;
66399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	uid;
66499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	gid;
66599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	pid;
66699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
66799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
66899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
66999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_out_header {
67099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	len;
67199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	int32_t		error;
67299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	unique;
67399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
67499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
67599fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_dirent {
67699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	ino;
67799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	off;
67899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	namelen;
67999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	type;
68099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	char name[];
68199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
68299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
68399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
68499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_DIRENT_ALIGN(x) \
68599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	(((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
68699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_DIRENT_SIZE(d) \
68799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
68899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
68999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_direntplus {
69099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	struct fuse_entry_out entry_out;
69199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	struct fuse_dirent dirent;
69299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
69399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
69499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_NAME_OFFSET_DIRENTPLUS \
69599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	offsetof(struct fuse_direntplus, dirent.name)
69699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#define FUSE_DIRENTPLUS_SIZE(d) \
69799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
69899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
69999fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_notify_inval_inode_out {
70099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	ino;
70199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	int64_t		off;
70299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	int64_t		len;
70399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
70499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
70599fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_notify_inval_entry_out {
70699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	parent;
70799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	namelen;
70899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
70999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
71099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
71199fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_notify_delete_out {
71299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	parent;
71399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	child;
71499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	namelen;
71599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
71699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
71799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
71899fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_notify_store_out {
71999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	nodeid;
72099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	offset;
72199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
72299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
72399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
72499fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
72599fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_notify_retrieve_out {
72699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	notify_unique;
72799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	nodeid;
72899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	offset;
72999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
73099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	padding;
73199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
73299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
73399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel/* Matches the size of fuse_write_in */
73499fbfc601eea9a971c75066c93823519773bd534Thierry Strudelstruct fuse_notify_retrieve_in {
73599fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	dummy1;
73699fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	offset;
73799fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	size;
73899fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint32_t	dummy2;
73999fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	dummy3;
74099fbfc601eea9a971c75066c93823519773bd534Thierry Strudel	uint64_t	dummy4;
74199fbfc601eea9a971c75066c93823519773bd534Thierry Strudel};
74299fbfc601eea9a971c75066c93823519773bd534Thierry Strudel
74399fbfc601eea9a971c75066c93823519773bd534Thierry Strudel#endif /* _LINUX_FUSE_H */
744