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