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