2
This file defines the kernel interface of FUSE
3
Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
5
This program can be distributed under the terms of the GNU GPL.
8
This -- and only this -- header file may also be distributed under
9
the terms of the BSD Licence as follows:
11
Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
13
Redistribution and use in source and binary forms, with or without
14
modification, are permitted provided that the following conditions
16
1. Redistributions of source code must retain the above copyright
17
notice, this list of conditions and the following disclaimer.
18
2. Redistributions in binary form must reproduce the above copyright
19
notice, this list of conditions and the following disclaimer in the
20
documentation and/or other materials provided with the distribution.
22
THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
26
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36
#include <sys/types.h>
37
#define __u64 uint64_t
38
#define __u32 uint32_t
41
#include <asm/types.h>
42
#include <linux/major.h>
45
/** Version number of this interface */
46
#define FUSE_KERNEL_VERSION 7
48
/** Minor version number of this interface */
49
#define FUSE_KERNEL_MINOR_VERSION 8
51
/** The node ID of the root inode */
52
#define FUSE_ROOT_ID 1
54
/** The major number of the fuse character device */
55
#define FUSE_MAJOR MISC_MAJOR
57
/** The minor number of the fuse character device */
58
#define FUSE_MINOR 229
60
/* Make sure all structures are padded to 64bit boundary, so 32bit
61
userspace works under 64bit kernels */
93
struct fuse_file_lock {
101
* Bitmasks for fuse_setattr_in.valid
103
#define FATTR_MODE (1 << 0)
104
#define FATTR_UID (1 << 1)
105
#define FATTR_GID (1 << 2)
106
#define FATTR_SIZE (1 << 3)
107
#define FATTR_ATIME (1 << 4)
108
#define FATTR_MTIME (1 << 5)
109
#define FATTR_FH (1 << 6)
112
* Flags returned by the OPEN request
114
* FOPEN_DIRECT_IO: bypass page cache for this open file
115
* FOPEN_KEEP_CACHE: don't invalidate the data cache on open
117
#define FOPEN_DIRECT_IO (1 << 0)
118
#define FOPEN_KEEP_CACHE (1 << 1)
121
* INIT request/reply flags
123
#define FUSE_ASYNC_READ (1 << 0)
124
#define FUSE_POSIX_LOCKS (1 << 1)
129
#define FUSE_RELEASE_FLUSH (1 << 0)
133
FUSE_FORGET = 2, /* no reply */
153
FUSE_REMOVEXATTR = 24,
158
FUSE_RELEASEDIR = 29,
170
/* The read buffer is required to be at least 8k, but may be much larger */
171
#define FUSE_MIN_READ_BUFFER 8192
173
struct fuse_entry_out {
174
__u64 nodeid; /* Inode ID */
175
__u64 generation; /* Inode generation: nodeid:gen must
176
be unique for the fs's lifetime */
177
__u64 entry_valid; /* Cache timeout for the name */
178
__u64 attr_valid; /* Cache timeout for the attributes */
179
__u32 entry_valid_nsec;
180
__u32 attr_valid_nsec;
181
struct fuse_attr attr;
184
struct fuse_forget_in {
188
struct fuse_attr_out {
189
__u64 attr_valid; /* Cache timeout for the attributes */
190
__u32 attr_valid_nsec;
192
struct fuse_attr attr;
195
struct fuse_mknod_in {
200
struct fuse_mkdir_in {
205
struct fuse_rename_in {
209
struct fuse_link_in {
213
struct fuse_setattr_in {
232
struct fuse_open_in {
237
struct fuse_open_out {
243
struct fuse_release_in {
250
struct fuse_flush_in {
257
struct fuse_read_in {
264
struct fuse_write_in {
271
struct fuse_write_out {
276
#define FUSE_COMPAT_STATFS_SIZE 48
278
struct fuse_statfs_out {
279
struct fuse_kstatfs st;
282
struct fuse_fsync_in {
288
struct fuse_setxattr_in {
293
struct fuse_getxattr_in {
298
struct fuse_getxattr_out {
306
struct fuse_file_lock lk;
310
struct fuse_file_lock lk;
313
struct fuse_access_in {
318
struct fuse_init_in {
325
struct fuse_init_out {
334
struct fuse_interrupt_in {
338
struct fuse_bmap_in {
344
struct fuse_bmap_out {
348
struct fuse_in_header {
359
struct fuse_out_header {
373
#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
374
#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
375
#define FUSE_DIRENT_SIZE(d) \
376
FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)