1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    This file defines the kernel interface of FUSE
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    This program can be distributed under the terms of the GNU GPL.
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    See the file COPYING.
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    This -- and only this -- header file may also be distributed under
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    the terms of the BSD Licence as follows:
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    Redistribution and use in source and binary forms, with or without
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    modification, are permitted provided that the following conditions
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    are met:
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    1. Redistributions of source code must retain the above copyright
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng       notice, this list of conditions and the following disclaimer.
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    2. Redistributions in binary form must reproduce the above copyright
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng       notice, this list of conditions and the following disclaimer in the
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng       documentation and/or other materials provided with the distribution.
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng    SUCH DAMAGE.
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng*/
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This file defines the kernel interface of FUSE
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Protocol changelog:
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.9:
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - new fuse_getattr_in input argument of GETATTR
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add lk_flags in fuse_lk_in
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add blksize field to fuse_attr
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add file flags field to fuse_read_in and fuse_write_in
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.10
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add nonseekable open flag
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.11
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add IOCTL message
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add unsolicited notification support
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add POLL message and NOTIFY_POLL notification
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.12
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add umask flag to input argument of open, mknod and mkdir
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add notification messages for invalidation of inodes and
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    directory entries
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.13
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - make max number of background requests and congestion threshold
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    tunables
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.14
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add splice support to fuse device
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.15
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add store notify
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add retrieve notify
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.16
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add BATCH_FORGET request
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_IOCTL_32BIT flag
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.17
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.18
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_IOCTL_DIR flag
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_NOTIFY_DELETE
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.19
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_FALLOCATE
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.20
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_AUTO_INVAL_DATA
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.21
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_READDIRPLUS
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - send the requested events in POLL request
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 7.22
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  - add FUSE_ASYNC_DIO
96314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *
97314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * 7.23
98314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *  - add FUSE_WRITEBACK_CACHE
99314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *  - add time_gran to fuse_init_out
100314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *  - add reserved space to fuse_init_out
101314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *  - add FATTR_CTIME
102314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *  - add ctime and ctimensec to fuse_setattr_in
103314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *  - add FUSE_RENAME2 request
104314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris *  - add FUSE_NO_OPEN_SUPPORT flag
105ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris *
106ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris *  7.24
107ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris *  - add FUSE_LSEEK for SEEK_HOLE and SEEK_DATA support
108ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris *
109ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris *  7.25
110ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris *  - add FUSE_PARALLEL_DIROPS
1113318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris *
1123318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris *  7.26
1133318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris *  - add FUSE_HANDLE_KILLPRIV
1143318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris *  - add FUSE_POSIX_ACL
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _LINUX_FUSE_H
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _LINUX_FUSE_H
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifdef __KERNEL__
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#else
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <stdint.h>
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Version negotiation:
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Both the kernel and userspace send the version they support in the
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * INIT request and reply respectively.
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If the major versions match then both shall use the smallest
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * of the two minor versions for communication.
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If the kernel supports a larger major version, then userspace shall
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * reply with the major version it supports, ignore the rest of the
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * INIT message and expect a new INIT message from the kernel with a
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * matching major version.
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If the library supports a larger major version, then it shall fall
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * back to the major protocol version sent by the kernel for
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * communication and reply with that major version (and an arbitrary
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * supported minor version).
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/** Version number of this interface */
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_KERNEL_VERSION 7
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/** Minor version number of this interface */
1503318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris#define FUSE_KERNEL_MINOR_VERSION 26
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/** The node ID of the root inode */
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_ROOT_ID 1
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Make sure all structures are padded to 64bit boundary, so 32bit
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   userspace works under 64bit kernels */
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_attr {
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	ino;
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	size;
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	blocks;
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	atime;
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	mtime;
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	ctime;
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	atimensec;
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mtimensec;
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	ctimensec;
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mode;
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	nlink;
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	uid;
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	gid;
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	rdev;
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	blksize;
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_kstatfs {
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	blocks;
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	bfree;
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	bavail;
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	files;
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	ffree;
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	bsize;
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	namelen;
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	frsize;
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	spare[6];
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_file_lock {
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	start;
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	end;
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	type;
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	pid; /* tgid */
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Bitmasks for fuse_setattr_in.valid
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_MODE	(1 << 0)
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_UID	(1 << 1)
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_GID	(1 << 2)
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_SIZE	(1 << 3)
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_ATIME	(1 << 4)
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_MTIME	(1 << 5)
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_FH	(1 << 6)
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_ATIME_NOW	(1 << 7)
208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_MTIME_NOW	(1 << 8)
209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FATTR_LOCKOWNER	(1 << 9)
210314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define FATTR_CTIME	(1 << 10)
211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Flags returned by the OPEN request
214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FOPEN_DIRECT_IO: bypass page cache for this open file
216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FOPEN_NONSEEKABLE: the file is not seekable
218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FOPEN_DIRECT_IO		(1 << 0)
220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FOPEN_KEEP_CACHE	(1 << 1)
221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FOPEN_NONSEEKABLE	(1 << 2)
222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * INIT request/reply flags
225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_ASYNC_READ: asynchronous read requests
227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_DONT_MASK: don't apply umask to file mode on create operations
233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_SPLICE_WRITE: kernel supports splice write on the device
234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_SPLICE_MOVE: kernel supports splice move on the device
235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_SPLICE_READ: kernel supports splice read on the device
236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_ASYNC_DIO: asynchronous direct I/O submission
242314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
243314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens
244ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir
2453318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc
2463318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris * FUSE_POSIX_ACL: filesystem supports posix acls
247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_ASYNC_READ		(1 << 0)
249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_POSIX_LOCKS	(1 << 1)
250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_FILE_OPS		(1 << 2)
251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_ATOMIC_O_TRUNC	(1 << 3)
252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_EXPORT_SUPPORT	(1 << 4)
253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_BIG_WRITES		(1 << 5)
254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_DONT_MASK		(1 << 6)
255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_SPLICE_WRITE	(1 << 7)
256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_SPLICE_MOVE	(1 << 8)
257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_SPLICE_READ	(1 << 9)
258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_FLOCK_LOCKS	(1 << 10)
259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_HAS_IOCTL_DIR	(1 << 11)
260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_AUTO_INVAL_DATA	(1 << 12)
261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_DO_READDIRPLUS	(1 << 13)
262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_READDIRPLUS_AUTO	(1 << 14)
263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_ASYNC_DIO		(1 << 15)
264314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define FUSE_WRITEBACK_CACHE	(1 << 16)
265314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define FUSE_NO_OPEN_SUPPORT	(1 << 17)
266ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris#define FUSE_PARALLEL_DIROPS    (1 << 18)
2673318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris#define FUSE_HANDLE_KILLPRIV	(1 << 19)
2683318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris#define FUSE_POSIX_ACL		(1 << 20)
269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * CUSE INIT request/reply flags
272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl
274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CUSE_UNRESTRICTED_IOCTL	(1 << 0)
276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Release flags
279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_RELEASE_FLUSH	(1 << 0)
281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_RELEASE_FLOCK_UNLOCK	(1 << 1)
282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Getattr flags
285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_GETATTR_FH		(1 << 0)
287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Lock flags
290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_LK_FLOCK		(1 << 0)
292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * WRITE flags
295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_WRITE_CACHE	(1 << 0)
300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_WRITE_LOCKOWNER	(1 << 1)
301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Read flags
304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_READ_LOCKOWNER	(1 << 1)
306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Ioctl flags
309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_IOCTL_RETRY: retry with new iovecs
313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_IOCTL_32BIT: 32bit ioctl
314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_IOCTL_DIR: is a directory
315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_IOCTL_COMPAT	(1 << 0)
319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_IOCTL_UNRESTRICTED	(1 << 1)
320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_IOCTL_RETRY	(1 << 2)
321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_IOCTL_32BIT	(1 << 3)
322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_IOCTL_DIR		(1 << 4)
323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_IOCTL_MAX_IOV	256
325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Poll flags
328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum fuse_opcode {
334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_LOOKUP	   = 1,
335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_FORGET	   = 2,  /* no reply */
336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_GETATTR	   = 3,
337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_SETATTR	   = 4,
338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_READLINK	   = 5,
339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_SYMLINK	   = 6,
340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_MKNOD	   = 8,
341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_MKDIR	   = 9,
342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_UNLINK	   = 10,
343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_RMDIR	   = 11,
344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_RENAME	   = 12,
345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_LINK	   = 13,
346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_OPEN	   = 14,
347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_READ	   = 15,
348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_WRITE	   = 16,
349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_STATFS	   = 17,
350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_RELEASE       = 18,
351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_FSYNC         = 20,
352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_SETXATTR      = 21,
353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_GETXATTR      = 22,
354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_LISTXATTR     = 23,
355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_REMOVEXATTR   = 24,
356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_FLUSH         = 25,
357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_INIT          = 26,
358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_OPENDIR       = 27,
359224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_READDIR       = 28,
360224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_RELEASEDIR    = 29,
361224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_FSYNCDIR      = 30,
362224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_GETLK         = 31,
363224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_SETLK         = 32,
364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_SETLKW        = 33,
365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_ACCESS        = 34,
366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_CREATE        = 35,
367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_INTERRUPT     = 36,
368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_BMAP          = 37,
369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_DESTROY       = 38,
370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_IOCTL         = 39,
371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_POLL          = 40,
372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_REPLY  = 41,
373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_BATCH_FORGET  = 42,
374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_FALLOCATE     = 43,
375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_READDIRPLUS   = 44,
376314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	FUSE_RENAME2       = 45,
377ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	FUSE_LSEEK         = 46,
378224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
379224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* CUSE specific operations */
380224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	CUSE_INIT          = 4096,
381224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum fuse_notify_code {
384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_POLL   = 1,
385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_INVAL_INODE = 2,
386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_INVAL_ENTRY = 3,
387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_STORE = 4,
388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_RETRIEVE = 5,
389224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_DELETE = 6,
390224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_NOTIFY_CODE_MAX,
391224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
392224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
393224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* The read buffer is required to be at least 8k, but may be much larger */
394224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_MIN_READ_BUFFER 8192
395224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
396224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
397224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
398224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_entry_out {
399224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	nodeid;		/* Inode ID */
400224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	generation;	/* Inode generation: nodeid:gen must
401224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng					   be unique for the fs's lifetime */
402224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	entry_valid;	/* Cache timeout for the name */
403224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	attr_valid;	/* Cache timeout for the attributes */
404224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	entry_valid_nsec;
405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	attr_valid_nsec;
406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct fuse_attr attr;
407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_forget_in {
410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	nlookup;
411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_forget_one {
414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	nodeid;
415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	nlookup;
416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_batch_forget_in {
419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	count;
420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	dummy;
421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_getattr_in {
424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	getattr_flags;
425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	dummy;
426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_COMPAT_ATTR_OUT_SIZE 96
430224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
431224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_attr_out {
432224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	attr_valid;	/* Cache timeout for the attributes */
433224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	attr_valid_nsec;
434224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	dummy;
435224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct fuse_attr attr;
436224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
437224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
438224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_COMPAT_MKNOD_IN_SIZE 8
439224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
440224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_mknod_in {
441224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mode;
442224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	rdev;
443224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	umask;
444224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
445224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
446224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
447224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_mkdir_in {
448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mode;
449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	umask;
450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_rename_in {
453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	newdir;
454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
455224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
456314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferrisstruct fuse_rename2_in {
457314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	uint64_t	newdir;
458314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	uint32_t	flags;
459314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	uint32_t	padding;
460314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris};
461314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris
462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_link_in {
463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	oldnodeid;
464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_setattr_in {
467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	valid;
468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
470224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	size;
471224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	lock_owner;
472224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	atime;
473224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	mtime;
474314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	uint64_t	ctime;
475224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	atimensec;
476224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mtimensec;
477314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	uint32_t	ctimensec;
478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mode;
479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	unused4;
480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	uid;
481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	gid;
482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	unused5;
483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
484224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
485224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_open_in {
486224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
487224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	unused;
488224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
489224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
490224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_create_in {
491224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
492224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mode;
493224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	umask;
494224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
495224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
496224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
497224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_open_out {
498224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
499224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	open_flags;
500224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
501224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
502224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
503224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_release_in {
504224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
505224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
506224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	release_flags;
507224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	lock_owner;
508224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
509224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
510224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_flush_in {
511224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
512224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	unused;
513224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
514224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	lock_owner;
515224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
516224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
517224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_read_in {
518224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
519224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	offset;
520224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
521224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	read_flags;
522224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	lock_owner;
523224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
524224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
525224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
526224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
527224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_COMPAT_WRITE_IN_SIZE 24
528224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
529224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_write_in {
530224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
531224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	offset;
532224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
533224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	write_flags;
534224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	lock_owner;
535224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
536224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
537224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
538224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
539224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_write_out {
540224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
541224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
542224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
543224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
544224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_COMPAT_STATFS_SIZE 48
545224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
546224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_statfs_out {
547224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct fuse_kstatfs st;
548224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
549224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
550224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_fsync_in {
551224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
552224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	fsync_flags;
553224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
554224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
555224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
556224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_setxattr_in {
557224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
558224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
559224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
560224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
561224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_getxattr_in {
562224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
563224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
564224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
565224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
566224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_getxattr_out {
567224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
568224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
569224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
570224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
571224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_lk_in {
572224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
573224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	owner;
574224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct fuse_file_lock lk;
575224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	lk_flags;
576224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
577224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
578224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
579224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_lk_out {
580224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct fuse_file_lock lk;
581224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
582224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
583224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_access_in {
584224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mask;
585224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
586224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
587224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
588224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_init_in {
589224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	major;
590224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	minor;
591224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	max_readahead;
592224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
593224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
594224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
595314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define FUSE_COMPAT_INIT_OUT_SIZE 8
596314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris#define FUSE_COMPAT_22_INIT_OUT_SIZE 24
597314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris
598224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_init_out {
599224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	major;
600224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	minor;
601224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	max_readahead;
602224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
603224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint16_t	max_background;
604224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint16_t	congestion_threshold;
605224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	max_write;
606314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	uint32_t	time_gran;
607314752488cb92b9f86028836d0b8eabd8acb6a7cChristopher Ferris	uint32_t	unused[9];
608224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
609224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
610224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CUSE_INIT_INFO_MAX 4096
611224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
612224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct cuse_init_in {
613224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	major;
614224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	minor;
615224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	unused;
616224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
617224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
618224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
619224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct cuse_init_out {
620224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	major;
621224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	minor;
622224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	unused;
623224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
624224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	max_read;
625224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	max_write;
626224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	dev_major;		/* chardev major */
627224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	dev_minor;		/* chardev minor */
628224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	spare[10];
629224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
630224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
631224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_interrupt_in {
632224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	unique;
633224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
634224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
635224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_bmap_in {
636224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	block;
637224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	blocksize;
638224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
639224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
640224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
641224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_bmap_out {
642224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	block;
643224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
644224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
645224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_ioctl_in {
646224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
647224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
648224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	cmd;
649224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	arg;
650224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	in_size;
651224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	out_size;
652224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
653224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
654224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_ioctl_iovec {
655224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	base;
656224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	len;
657224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
658224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
659224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_ioctl_out {
660224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int32_t		result;
661224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
662224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	in_iovs;
663224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	out_iovs;
664224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
665224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
666224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_poll_in {
667224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
668224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	kh;
669224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	flags;
670224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	events;
671224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
672224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
673224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_poll_out {
674224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	revents;
675224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
676224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
677224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
678224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_notify_poll_wakeup_out {
679224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	kh;
680224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
681224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
682224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_fallocate_in {
683224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	fh;
684224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	offset;
685224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	length;
686224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	mode;
687224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
688224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
689224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
690224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_in_header {
691224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	len;
692224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	opcode;
693224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	unique;
694224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	nodeid;
695224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	uid;
696224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	gid;
697224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	pid;
698224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
699224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
700224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
701224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_out_header {
702224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	len;
703224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int32_t		error;
704224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	unique;
705224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
706224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
707224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_dirent {
708224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	ino;
709224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	off;
710224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	namelen;
711224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	type;
712224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char name[];
713224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
714224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
715224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
716224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_DIRENT_ALIGN(x) \
717224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	(((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
718224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_DIRENT_SIZE(d) \
719224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
720224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
721224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_direntplus {
722224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct fuse_entry_out entry_out;
723224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct fuse_dirent dirent;
724224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
725224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
726224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_NAME_OFFSET_DIRENTPLUS \
727224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	offsetof(struct fuse_direntplus, dirent.name)
728224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FUSE_DIRENTPLUS_SIZE(d) \
729224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
730224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
731224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_notify_inval_inode_out {
732224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	ino;
733224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int64_t		off;
734224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int64_t		len;
735224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
736224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
737224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_notify_inval_entry_out {
738224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	parent;
739224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	namelen;
740224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
741224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
742224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
743224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_notify_delete_out {
744224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	parent;
745224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	child;
746224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	namelen;
747224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
748224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
749224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
750224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_notify_store_out {
751224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	nodeid;
752224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	offset;
753224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
754224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
755224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
756224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
757224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_notify_retrieve_out {
758224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	notify_unique;
759224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	nodeid;
760224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	offset;
761224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
762224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	padding;
763224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
764224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
765224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Matches the size of fuse_write_in */
766224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct fuse_notify_retrieve_in {
767224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	dummy1;
768224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	offset;
769224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	size;
770224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint32_t	dummy2;
771224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	dummy3;
772224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	uint64_t	dummy4;
773224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
774224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
77512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* Device ioctls: */
77612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define FUSE_DEV_IOC_CLONE	_IOR(229, 0, uint32_t)
77712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
778ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferrisstruct fuse_lseek_in {
779ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	uint64_t	fh;
780ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	uint64_t	offset;
781ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	uint32_t	whence;
782ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	uint32_t	padding;
783ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris};
784ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris
785ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferrisstruct fuse_lseek_out {
786ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	uint64_t	offset;
787ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris};
788ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris
789224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _LINUX_FUSE_H */
790