]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - include/uapi/linux/fuse.h
fuse: add FUSE_WRITE_KILL_PRIV
[mirror_ubuntu-jammy-kernel.git] / include / uapi / linux / fuse.h
CommitLineData
e2be04c7 1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
d8a5ba45 2/*
7e98d530 3 This file defines the kernel interface of FUSE
1f55ed06 4 Copyright (C) 2001-2008 Miklos Szeredi <miklos@szeredi.hu>
d8a5ba45
MS
5
6 This program can be distributed under the terms of the GNU GPL.
7 See the file COPYING.
7e98d530
MS
8
9 This -- and only this -- header file may also be distributed under
10 the terms of the BSD Licence as follows:
11
12 Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
13
14 Redistribution and use in source and binary forms, with or without
15 modification, are permitted provided that the following conditions
16 are met:
17 1. Redistributions of source code must retain the above copyright
18 notice, this list of conditions and the following disclaimer.
19 2. Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in the
21 documentation and/or other materials provided with the distribution.
22
23 THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
24 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
27 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 SUCH DAMAGE.
d8a5ba45
MS
34*/
35
c79e322f
MS
36/*
37 * This file defines the kernel interface of FUSE
38 *
39 * Protocol changelog:
40 *
41 * 7.9:
42 * - new fuse_getattr_in input argument of GETATTR
a9ff4f87 43 * - add lk_flags in fuse_lk_in
f3332114 44 * - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
0e9663ee 45 * - add blksize field to fuse_attr
a6643094 46 * - add file flags field to fuse_read_in and fuse_write_in
7142fd1b 47 * - Add ATIME_NOW and MTIME_NOW flags to fuse_setattr_in
a7c1b990
TH
48 *
49 * 7.10
50 * - add nonseekable open flag
1f55ed06
MS
51 *
52 * 7.11
53 * - add IOCTL message
54 * - add unsolicited notification support
55 * - add POLL message and NOTIFY_POLL notification
e0a43ddc
MS
56 *
57 * 7.12
68065b84 58 * - add umask flag to input argument of create, mknod and mkdir
3b463ae0
JM
59 * - add notification messages for invalidation of inodes and
60 * directory entries
7a6d3c8b
CH
61 *
62 * 7.13
63 * - make max number of background requests and congestion threshold
64 * tunables
dd3bb14f
MS
65 *
66 * 7.14
67 * - add splice support to fuse device
a1d75f25
MS
68 *
69 * 7.15
70 * - add store notify
2d45ba38 71 * - add retrieve notify
02c048b9
MS
72 *
73 * 7.16
74 * - add BATCH_FORGET request
1baa26b2
MS
75 * - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
76 * fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
77 * - add FUSE_IOCTL_32BIT flag
37fb3a30
MS
78 *
79 * 7.17
80 * - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
b18da0c5
MS
81 *
82 * 7.18
83 * - add FUSE_IOCTL_DIR flag
451d0f59 84 * - add FUSE_NOTIFY_DELETE
05ba1f08
AP
85 *
86 * 7.19
87 * - add FUSE_FALLOCATE
72d0d248
BF
88 *
89 * 7.20
90 * - add FUSE_AUTO_INVAL_DATA
23c153e5
MS
91 *
92 * 7.21
93 * - add FUSE_READDIRPLUS
0415d291 94 * - send the requested events in POLL request
60b9df7a
MS
95 *
96 * 7.22
97 * - add FUSE_ASYNC_DIO
4d99ff8f
PE
98 *
99 * 7.23
100 * - add FUSE_WRITEBACK_CACHE
e27c9d38
MS
101 * - add time_gran to fuse_init_out
102 * - add reserved space to fuse_init_out
ab9e13f7
MP
103 * - add FATTR_CTIME
104 * - add ctime and ctimensec to fuse_setattr_in
1560c974 105 * - add FUSE_RENAME2 request
d7afaec0 106 * - add FUSE_NO_OPEN_SUPPORT flag
0b5da8db
R
107 *
108 * 7.24
109 * - add FUSE_LSEEK for SEEK_HOLE and SEEK_DATA support
5c672ab3
MS
110 *
111 * 7.25
112 * - add FUSE_PARALLEL_DIROPS
5e940c1d
MS
113 *
114 * 7.26
115 * - add FUSE_HANDLE_KILLPRIV
60bcc88a 116 * - add FUSE_POSIX_ACL
3b7008b2
SL
117 *
118 * 7.27
119 * - add FUSE_ABORT_ERROR
88bc7d50
NV
120 *
121 * 7.28
122 * - add FUSE_COPY_FILE_RANGE
6433b899 123 * - add FOPEN_CACHE_DIR
5da784cc 124 * - add FUSE_MAX_PAGES, add max_pages to init_out
5571f1e6 125 * - add FUSE_CACHE_SYMLINKS
d9a9ea94
CA
126 *
127 * 7.29
128 * - add FUSE_NO_OPENDIR_SUPPORT flag
ad2ba64d
KS
129 *
130 * 7.30
131 * - add FUSE_EXPLICIT_INVAL_DATA
6407f44a 132 * - add FUSE_IOCTL_COMPAT_X32
4a2abf99
MS
133 *
134 * 7.31
135 * - add FUSE_WRITE_KILL_PRIV flag
c79e322f 136 */
d8a5ba45 137
29d434b3
TH
138#ifndef _LINUX_FUSE_H
139#define _LINUX_FUSE_H
140
4c82456e 141#ifdef __KERNEL__
1f55ed06 142#include <linux/types.h>
7e98d530
MS
143#else
144#include <stdint.h>
7e98d530 145#endif
d8a5ba45 146
37d217f0
MS
147/*
148 * Version negotiation:
149 *
150 * Both the kernel and userspace send the version they support in the
151 * INIT request and reply respectively.
152 *
153 * If the major versions match then both shall use the smallest
154 * of the two minor versions for communication.
155 *
156 * If the kernel supports a larger major version, then userspace shall
157 * reply with the major version it supports, ignore the rest of the
158 * INIT message and expect a new INIT message from the kernel with a
159 * matching major version.
160 *
161 * If the library supports a larger major version, then it shall fall
162 * back to the major protocol version sent by the kernel for
163 * communication and reply with that major version (and an arbitrary
164 * supported minor version).
165 */
166
d8a5ba45 167/** Version number of this interface */
9e6268db 168#define FUSE_KERNEL_VERSION 7
d8a5ba45
MS
169
170/** Minor version number of this interface */
4a2abf99 171#define FUSE_KERNEL_MINOR_VERSION 31
d8a5ba45
MS
172
173/** The node ID of the root inode */
174#define FUSE_ROOT_ID 1
175
06663267
MS
176/* Make sure all structures are padded to 64bit boundary, so 32bit
177 userspace works under 64bit kernels */
178
d8a5ba45 179struct fuse_attr {
4c82456e
MS
180 uint64_t ino;
181 uint64_t size;
182 uint64_t blocks;
183 uint64_t atime;
184 uint64_t mtime;
185 uint64_t ctime;
186 uint32_t atimensec;
187 uint32_t mtimensec;
188 uint32_t ctimensec;
189 uint32_t mode;
190 uint32_t nlink;
191 uint32_t uid;
192 uint32_t gid;
193 uint32_t rdev;
194 uint32_t blksize;
195 uint32_t padding;
d8a5ba45
MS
196};
197
e5e5558e 198struct fuse_kstatfs {
4c82456e
MS
199 uint64_t blocks;
200 uint64_t bfree;
201 uint64_t bavail;
202 uint64_t files;
203 uint64_t ffree;
204 uint32_t bsize;
205 uint32_t namelen;
206 uint32_t frsize;
207 uint32_t padding;
208 uint32_t spare[6];
e5e5558e
MS
209};
210
71421259 211struct fuse_file_lock {
4c82456e
MS
212 uint64_t start;
213 uint64_t end;
214 uint32_t type;
215 uint32_t pid; /* tgid */
71421259
MS
216};
217
9cd68455
MS
218/**
219 * Bitmasks for fuse_setattr_in.valid
220 */
9e6268db
MS
221#define FATTR_MODE (1 << 0)
222#define FATTR_UID (1 << 1)
223#define FATTR_GID (1 << 2)
224#define FATTR_SIZE (1 << 3)
225#define FATTR_ATIME (1 << 4)
226#define FATTR_MTIME (1 << 5)
befc649c 227#define FATTR_FH (1 << 6)
17637cba
MS
228#define FATTR_ATIME_NOW (1 << 7)
229#define FATTR_MTIME_NOW (1 << 8)
f3332114 230#define FATTR_LOCKOWNER (1 << 9)
ab9e13f7 231#define FATTR_CTIME (1 << 10)
9e6268db 232
45323fb7
MS
233/**
234 * Flags returned by the OPEN request
235 *
236 * FOPEN_DIRECT_IO: bypass page cache for this open file
237 * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
a7c1b990 238 * FOPEN_NONSEEKABLE: the file is not seekable
6433b899 239 * FOPEN_CACHE_DIR: allow caching this directory
bbd84f33 240 * FOPEN_STREAM: the file is stream-like (no file position at all)
45323fb7
MS
241 */
242#define FOPEN_DIRECT_IO (1 << 0)
243#define FOPEN_KEEP_CACHE (1 << 1)
a7c1b990 244#define FOPEN_NONSEEKABLE (1 << 2)
6433b899 245#define FOPEN_CACHE_DIR (1 << 3)
bbd84f33 246#define FOPEN_STREAM (1 << 4)
45323fb7 247
9cd68455
MS
248/**
249 * INIT request/reply flags
33670fa2 250 *
f3840dc0 251 * FUSE_ASYNC_READ: asynchronous read requests
37fb3a30 252 * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
f3840dc0
MS
253 * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
254 * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
33670fa2 255 * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
f3840dc0 256 * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
e0a43ddc 257 * FUSE_DONT_MASK: don't apply umask to file mode on create operations
69fe05c9
MS
258 * FUSE_SPLICE_WRITE: kernel supports splice write on the device
259 * FUSE_SPLICE_MOVE: kernel supports splice move on the device
260 * FUSE_SPLICE_READ: kernel supports splice read on the device
37fb3a30 261 * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
69fe05c9 262 * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
72d0d248 263 * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
634734b6
EW
264 * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
265 * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
60b9df7a 266 * FUSE_ASYNC_DIO: asynchronous direct I/O submission
4d99ff8f 267 * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
d7afaec0 268 * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens
5c672ab3 269 * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir
5e940c1d 270 * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc
60bcc88a 271 * FUSE_POSIX_ACL: filesystem supports posix acls
3b7008b2 272 * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED
5da784cc 273 * FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages
5571f1e6 274 * FUSE_CACHE_SYMLINKS: cache READLINK responses
d9a9ea94 275 * FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir
ad2ba64d 276 * FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request
9cd68455
MS
277 */
278#define FUSE_ASYNC_READ (1 << 0)
71421259 279#define FUSE_POSIX_LOCKS (1 << 1)
c79e322f 280#define FUSE_FILE_OPS (1 << 2)
6ff958ed 281#define FUSE_ATOMIC_O_TRUNC (1 << 3)
33670fa2 282#define FUSE_EXPORT_SUPPORT (1 << 4)
78bb6cb9 283#define FUSE_BIG_WRITES (1 << 5)
e0a43ddc 284#define FUSE_DONT_MASK (1 << 6)
69fe05c9
MS
285#define FUSE_SPLICE_WRITE (1 << 7)
286#define FUSE_SPLICE_MOVE (1 << 8)
287#define FUSE_SPLICE_READ (1 << 9)
37fb3a30 288#define FUSE_FLOCK_LOCKS (1 << 10)
69fe05c9 289#define FUSE_HAS_IOCTL_DIR (1 << 11)
72d0d248 290#define FUSE_AUTO_INVAL_DATA (1 << 12)
0b05b183 291#define FUSE_DO_READDIRPLUS (1 << 13)
634734b6 292#define FUSE_READDIRPLUS_AUTO (1 << 14)
60b9df7a 293#define FUSE_ASYNC_DIO (1 << 15)
4d99ff8f 294#define FUSE_WRITEBACK_CACHE (1 << 16)
d7afaec0 295#define FUSE_NO_OPEN_SUPPORT (1 << 17)
5c672ab3 296#define FUSE_PARALLEL_DIROPS (1 << 18)
5e940c1d 297#define FUSE_HANDLE_KILLPRIV (1 << 19)
60bcc88a 298#define FUSE_POSIX_ACL (1 << 20)
3b7008b2 299#define FUSE_ABORT_ERROR (1 << 21)
5da784cc 300#define FUSE_MAX_PAGES (1 << 22)
5571f1e6 301#define FUSE_CACHE_SYMLINKS (1 << 23)
d9a9ea94 302#define FUSE_NO_OPENDIR_SUPPORT (1 << 24)
ad2ba64d 303#define FUSE_EXPLICIT_INVAL_DATA (1 << 25)
9cd68455 304
151060ac
TH
305/**
306 * CUSE INIT request/reply flags
307 *
308 * CUSE_UNRESTRICTED_IOCTL: use unrestricted ioctl
309 */
310#define CUSE_UNRESTRICTED_IOCTL (1 << 0)
311
e9168c18
MS
312/**
313 * Release flags
314 */
315#define FUSE_RELEASE_FLUSH (1 << 0)
37fb3a30 316#define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1)
e9168c18 317
c79e322f
MS
318/**
319 * Getattr flags
320 */
321#define FUSE_GETATTR_FH (1 << 0)
322
a9ff4f87
MS
323/**
324 * Lock flags
325 */
326#define FUSE_LK_FLOCK (1 << 0)
327
b25e82e5
MS
328/**
329 * WRITE flags
330 *
331 * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
f3332114 332 * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
4a2abf99 333 * FUSE_WRITE_KILL_PRIV: kill suid and sgid bits
b25e82e5
MS
334 */
335#define FUSE_WRITE_CACHE (1 << 0)
f3332114 336#define FUSE_WRITE_LOCKOWNER (1 << 1)
4a2abf99 337#define FUSE_WRITE_KILL_PRIV (1 << 2)
f3332114
MS
338
339/**
340 * Read flags
341 */
342#define FUSE_READ_LOCKOWNER (1 << 1)
b25e82e5 343
59efec7b
TH
344/**
345 * Ioctl flags
346 *
347 * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
348 * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
349 * FUSE_IOCTL_RETRY: retry with new iovecs
1baa26b2 350 * FUSE_IOCTL_32BIT: 32bit ioctl
b18da0c5 351 * FUSE_IOCTL_DIR: is a directory
6407f44a 352 * FUSE_IOCTL_COMPAT_X32: x32 compat ioctl on 64bit machine (64bit time_t)
59efec7b
TH
353 *
354 * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
355 */
356#define FUSE_IOCTL_COMPAT (1 << 0)
357#define FUSE_IOCTL_UNRESTRICTED (1 << 1)
358#define FUSE_IOCTL_RETRY (1 << 2)
1baa26b2 359#define FUSE_IOCTL_32BIT (1 << 3)
b18da0c5 360#define FUSE_IOCTL_DIR (1 << 4)
6407f44a 361#define FUSE_IOCTL_COMPAT_X32 (1 << 5)
59efec7b
TH
362
363#define FUSE_IOCTL_MAX_IOV 256
364
95668a69
TH
365/**
366 * Poll flags
367 *
368 * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
369 */
370#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
371
154603fe
AS
372/**
373 * Fsync flags
374 *
375 * FUSE_FSYNC_FDATASYNC: Sync data only, not metadata
376 */
377#define FUSE_FSYNC_FDATASYNC (1 << 0)
378
334f485d 379enum fuse_opcode {
88bc7d50
NV
380 FUSE_LOOKUP = 1,
381 FUSE_FORGET = 2, /* no reply */
382 FUSE_GETATTR = 3,
383 FUSE_SETATTR = 4,
384 FUSE_READLINK = 5,
385 FUSE_SYMLINK = 6,
386 FUSE_MKNOD = 8,
387 FUSE_MKDIR = 9,
388 FUSE_UNLINK = 10,
389 FUSE_RMDIR = 11,
390 FUSE_RENAME = 12,
391 FUSE_LINK = 13,
392 FUSE_OPEN = 14,
393 FUSE_READ = 15,
394 FUSE_WRITE = 16,
395 FUSE_STATFS = 17,
396 FUSE_RELEASE = 18,
397 FUSE_FSYNC = 20,
398 FUSE_SETXATTR = 21,
399 FUSE_GETXATTR = 22,
400 FUSE_LISTXATTR = 23,
401 FUSE_REMOVEXATTR = 24,
402 FUSE_FLUSH = 25,
403 FUSE_INIT = 26,
404 FUSE_OPENDIR = 27,
405 FUSE_READDIR = 28,
406 FUSE_RELEASEDIR = 29,
407 FUSE_FSYNCDIR = 30,
408 FUSE_GETLK = 31,
409 FUSE_SETLK = 32,
410 FUSE_SETLKW = 33,
411 FUSE_ACCESS = 34,
412 FUSE_CREATE = 35,
413 FUSE_INTERRUPT = 36,
414 FUSE_BMAP = 37,
415 FUSE_DESTROY = 38,
416 FUSE_IOCTL = 39,
417 FUSE_POLL = 40,
418 FUSE_NOTIFY_REPLY = 41,
419 FUSE_BATCH_FORGET = 42,
420 FUSE_FALLOCATE = 43,
421 FUSE_READDIRPLUS = 44,
422 FUSE_RENAME2 = 45,
423 FUSE_LSEEK = 46,
424 FUSE_COPY_FILE_RANGE = 47,
151060ac
TH
425
426 /* CUSE specific operations */
88bc7d50 427 CUSE_INIT = 4096,
334f485d
MS
428};
429
8599396b 430enum fuse_notify_code {
95668a69 431 FUSE_NOTIFY_POLL = 1,
3b463ae0
JM
432 FUSE_NOTIFY_INVAL_INODE = 2,
433 FUSE_NOTIFY_INVAL_ENTRY = 3,
a1d75f25 434 FUSE_NOTIFY_STORE = 4,
2d45ba38 435 FUSE_NOTIFY_RETRIEVE = 5,
451d0f59 436 FUSE_NOTIFY_DELETE = 6,
8599396b
TH
437 FUSE_NOTIFY_CODE_MAX,
438};
439
1d3d752b
MS
440/* The read buffer is required to be at least 8k, but may be much larger */
441#define FUSE_MIN_READ_BUFFER 8192
e5e5558e 442
0e9663ee
MS
443#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
444
e5e5558e 445struct fuse_entry_out {
4c82456e
MS
446 uint64_t nodeid; /* Inode ID */
447 uint64_t generation; /* Inode generation: nodeid:gen must
448 be unique for the fs's lifetime */
449 uint64_t entry_valid; /* Cache timeout for the name */
450 uint64_t attr_valid; /* Cache timeout for the attributes */
451 uint32_t entry_valid_nsec;
452 uint32_t attr_valid_nsec;
e5e5558e
MS
453 struct fuse_attr attr;
454};
455
456struct fuse_forget_in {
4c82456e 457 uint64_t nlookup;
e5e5558e
MS
458};
459
02c048b9 460struct fuse_forget_one {
4c82456e
MS
461 uint64_t nodeid;
462 uint64_t nlookup;
02c048b9
MS
463};
464
465struct fuse_batch_forget_in {
4c82456e
MS
466 uint32_t count;
467 uint32_t dummy;
02c048b9
MS
468};
469
c79e322f 470struct fuse_getattr_in {
4c82456e
MS
471 uint32_t getattr_flags;
472 uint32_t dummy;
473 uint64_t fh;
c79e322f
MS
474};
475
0e9663ee
MS
476#define FUSE_COMPAT_ATTR_OUT_SIZE 96
477
e5e5558e 478struct fuse_attr_out {
4c82456e
MS
479 uint64_t attr_valid; /* Cache timeout for the attributes */
480 uint32_t attr_valid_nsec;
481 uint32_t dummy;
e5e5558e
MS
482 struct fuse_attr attr;
483};
484
e0a43ddc
MS
485#define FUSE_COMPAT_MKNOD_IN_SIZE 8
486
9e6268db 487struct fuse_mknod_in {
4c82456e
MS
488 uint32_t mode;
489 uint32_t rdev;
490 uint32_t umask;
491 uint32_t padding;
9e6268db
MS
492};
493
494struct fuse_mkdir_in {
4c82456e
MS
495 uint32_t mode;
496 uint32_t umask;
9e6268db
MS
497};
498
499struct fuse_rename_in {
4c82456e 500 uint64_t newdir;
9e6268db
MS
501};
502
1560c974
MS
503struct fuse_rename2_in {
504 uint64_t newdir;
505 uint32_t flags;
506 uint32_t padding;
507};
508
9e6268db 509struct fuse_link_in {
4c82456e 510 uint64_t oldnodeid;
9e6268db
MS
511};
512
513struct fuse_setattr_in {
4c82456e
MS
514 uint32_t valid;
515 uint32_t padding;
516 uint64_t fh;
517 uint64_t size;
518 uint64_t lock_owner;
519 uint64_t atime;
520 uint64_t mtime;
ab9e13f7 521 uint64_t ctime;
4c82456e
MS
522 uint32_t atimensec;
523 uint32_t mtimensec;
ab9e13f7 524 uint32_t ctimensec;
4c82456e
MS
525 uint32_t mode;
526 uint32_t unused4;
527 uint32_t uid;
528 uint32_t gid;
529 uint32_t unused5;
9e6268db
MS
530};
531
b6aeaded 532struct fuse_open_in {
4c82456e
MS
533 uint32_t flags;
534 uint32_t unused;
e0a43ddc
MS
535};
536
537struct fuse_create_in {
4c82456e
MS
538 uint32_t flags;
539 uint32_t mode;
540 uint32_t umask;
541 uint32_t padding;
b6aeaded
MS
542};
543
544struct fuse_open_out {
4c82456e
MS
545 uint64_t fh;
546 uint32_t open_flags;
547 uint32_t padding;
b6aeaded
MS
548};
549
550struct fuse_release_in {
4c82456e
MS
551 uint64_t fh;
552 uint32_t flags;
553 uint32_t release_flags;
554 uint64_t lock_owner;
b6aeaded
MS
555};
556
557struct fuse_flush_in {
4c82456e
MS
558 uint64_t fh;
559 uint32_t unused;
560 uint32_t padding;
561 uint64_t lock_owner;
b6aeaded
MS
562};
563
564struct fuse_read_in {
4c82456e
MS
565 uint64_t fh;
566 uint64_t offset;
567 uint32_t size;
568 uint32_t read_flags;
569 uint64_t lock_owner;
570 uint32_t flags;
571 uint32_t padding;
b6aeaded
MS
572};
573
f3332114
MS
574#define FUSE_COMPAT_WRITE_IN_SIZE 24
575
b6aeaded 576struct fuse_write_in {
4c82456e
MS
577 uint64_t fh;
578 uint64_t offset;
579 uint32_t size;
580 uint32_t write_flags;
581 uint64_t lock_owner;
582 uint32_t flags;
583 uint32_t padding;
b6aeaded
MS
584};
585
586struct fuse_write_out {
4c82456e
MS
587 uint32_t size;
588 uint32_t padding;
b6aeaded
MS
589};
590
de5f1202
MS
591#define FUSE_COMPAT_STATFS_SIZE 48
592
e5e5558e
MS
593struct fuse_statfs_out {
594 struct fuse_kstatfs st;
595};
596
b6aeaded 597struct fuse_fsync_in {
4c82456e
MS
598 uint64_t fh;
599 uint32_t fsync_flags;
600 uint32_t padding;
b6aeaded
MS
601};
602
92a8780e 603struct fuse_setxattr_in {
4c82456e
MS
604 uint32_t size;
605 uint32_t flags;
92a8780e
MS
606};
607
608struct fuse_getxattr_in {
4c82456e
MS
609 uint32_t size;
610 uint32_t padding;
92a8780e
MS
611};
612
613struct fuse_getxattr_out {
4c82456e
MS
614 uint32_t size;
615 uint32_t padding;
92a8780e
MS
616};
617
71421259 618struct fuse_lk_in {
4c82456e
MS
619 uint64_t fh;
620 uint64_t owner;
71421259 621 struct fuse_file_lock lk;
4c82456e
MS
622 uint32_t lk_flags;
623 uint32_t padding;
71421259
MS
624};
625
626struct fuse_lk_out {
627 struct fuse_file_lock lk;
628};
629
31d40d74 630struct fuse_access_in {
4c82456e
MS
631 uint32_t mask;
632 uint32_t padding;
31d40d74
MS
633};
634
3ec870d5 635struct fuse_init_in {
4c82456e
MS
636 uint32_t major;
637 uint32_t minor;
638 uint32_t max_readahead;
639 uint32_t flags;
334f485d
MS
640};
641
e27c9d38
MS
642#define FUSE_COMPAT_INIT_OUT_SIZE 8
643#define FUSE_COMPAT_22_INIT_OUT_SIZE 24
644
3ec870d5 645struct fuse_init_out {
4c82456e
MS
646 uint32_t major;
647 uint32_t minor;
648 uint32_t max_readahead;
649 uint32_t flags;
650 uint16_t max_background;
651 uint16_t congestion_threshold;
652 uint32_t max_write;
e27c9d38 653 uint32_t time_gran;
5da784cc
CS
654 uint16_t max_pages;
655 uint16_t padding;
656 uint32_t unused[8];
3ec870d5
MS
657};
658
151060ac
TH
659#define CUSE_INIT_INFO_MAX 4096
660
661struct cuse_init_in {
4c82456e
MS
662 uint32_t major;
663 uint32_t minor;
664 uint32_t unused;
665 uint32_t flags;
151060ac
TH
666};
667
668struct cuse_init_out {
4c82456e
MS
669 uint32_t major;
670 uint32_t minor;
671 uint32_t unused;
672 uint32_t flags;
673 uint32_t max_read;
674 uint32_t max_write;
675 uint32_t dev_major; /* chardev major */
676 uint32_t dev_minor; /* chardev minor */
677 uint32_t spare[10];
151060ac
TH
678};
679
a4d27e75 680struct fuse_interrupt_in {
4c82456e 681 uint64_t unique;
a4d27e75
MS
682};
683
b2d2272f 684struct fuse_bmap_in {
4c82456e
MS
685 uint64_t block;
686 uint32_t blocksize;
687 uint32_t padding;
b2d2272f
MS
688};
689
690struct fuse_bmap_out {
4c82456e 691 uint64_t block;
b2d2272f
MS
692};
693
59efec7b 694struct fuse_ioctl_in {
4c82456e
MS
695 uint64_t fh;
696 uint32_t flags;
697 uint32_t cmd;
698 uint64_t arg;
699 uint32_t in_size;
700 uint32_t out_size;
59efec7b
TH
701};
702
1baa26b2 703struct fuse_ioctl_iovec {
4c82456e
MS
704 uint64_t base;
705 uint64_t len;
1baa26b2
MS
706};
707
59efec7b 708struct fuse_ioctl_out {
4c82456e
MS
709 int32_t result;
710 uint32_t flags;
711 uint32_t in_iovs;
712 uint32_t out_iovs;
59efec7b
TH
713};
714
95668a69 715struct fuse_poll_in {
4c82456e
MS
716 uint64_t fh;
717 uint64_t kh;
718 uint32_t flags;
719 uint32_t events;
95668a69
TH
720};
721
722struct fuse_poll_out {
4c82456e
MS
723 uint32_t revents;
724 uint32_t padding;
95668a69
TH
725};
726
727struct fuse_notify_poll_wakeup_out {
4c82456e 728 uint64_t kh;
95668a69
TH
729};
730
05ba1f08 731struct fuse_fallocate_in {
4c82456e
MS
732 uint64_t fh;
733 uint64_t offset;
734 uint64_t length;
735 uint32_t mode;
736 uint32_t padding;
05ba1f08
AP
737};
738
334f485d 739struct fuse_in_header {
4c82456e
MS
740 uint32_t len;
741 uint32_t opcode;
742 uint64_t unique;
743 uint64_t nodeid;
744 uint32_t uid;
745 uint32_t gid;
746 uint32_t pid;
747 uint32_t padding;
334f485d
MS
748};
749
750struct fuse_out_header {
4c82456e
MS
751 uint32_t len;
752 int32_t error;
753 uint64_t unique;
334f485d
MS
754};
755
e5e5558e 756struct fuse_dirent {
4c82456e
MS
757 uint64_t ino;
758 uint64_t off;
759 uint32_t namelen;
760 uint32_t type;
c628ee67 761 char name[];
e5e5558e
MS
762};
763
21f3da95 764#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
4c82456e
MS
765#define FUSE_DIRENT_ALIGN(x) \
766 (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
e5e5558e
MS
767#define FUSE_DIRENT_SIZE(d) \
768 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
29d434b3 769
0b05b183
AA
770struct fuse_direntplus {
771 struct fuse_entry_out entry_out;
772 struct fuse_dirent dirent;
773};
774
775#define FUSE_NAME_OFFSET_DIRENTPLUS \
776 offsetof(struct fuse_direntplus, dirent.name)
777#define FUSE_DIRENTPLUS_SIZE(d) \
778 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
779
3b463ae0 780struct fuse_notify_inval_inode_out {
4c82456e
MS
781 uint64_t ino;
782 int64_t off;
783 int64_t len;
3b463ae0
JM
784};
785
786struct fuse_notify_inval_entry_out {
4c82456e
MS
787 uint64_t parent;
788 uint32_t namelen;
789 uint32_t padding;
3b463ae0
JM
790};
791
451d0f59 792struct fuse_notify_delete_out {
4c82456e
MS
793 uint64_t parent;
794 uint64_t child;
795 uint32_t namelen;
796 uint32_t padding;
451d0f59
JM
797};
798
a1d75f25 799struct fuse_notify_store_out {
4c82456e
MS
800 uint64_t nodeid;
801 uint64_t offset;
802 uint32_t size;
803 uint32_t padding;
a1d75f25
MS
804};
805
2d45ba38 806struct fuse_notify_retrieve_out {
4c82456e
MS
807 uint64_t notify_unique;
808 uint64_t nodeid;
809 uint64_t offset;
810 uint32_t size;
811 uint32_t padding;
2d45ba38
MS
812};
813
814/* Matches the size of fuse_write_in */
815struct fuse_notify_retrieve_in {
4c82456e
MS
816 uint64_t dummy1;
817 uint64_t offset;
818 uint32_t size;
819 uint32_t dummy2;
820 uint64_t dummy3;
821 uint64_t dummy4;
2d45ba38
MS
822};
823
00c570f4
MS
824/* Device ioctls: */
825#define FUSE_DEV_IOC_CLONE _IOR(229, 0, uint32_t)
826
0b5da8db
R
827struct fuse_lseek_in {
828 uint64_t fh;
829 uint64_t offset;
830 uint32_t whence;
831 uint32_t padding;
832};
833
834struct fuse_lseek_out {
835 uint64_t offset;
836};
837
88bc7d50
NV
838struct fuse_copy_file_range_in {
839 uint64_t fh_in;
840 uint64_t off_in;
841 uint64_t nodeid_out;
842 uint64_t fh_out;
843 uint64_t off_out;
844 uint64_t len;
845 uint64_t flags;
846};
847
29d434b3 848#endif /* _LINUX_FUSE_H */