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.
6 * See the file COPYING.
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
38 #include <sys/types.h>
39 #define __u64 uint64_t
40 #define __u32 uint32_t
43 #include <asm/types.h>
44 #include <linux/major.h>
47 /** Version number of this interface */
48 #define FUSE_KERNEL_VERSION 7
50 /** Minor version number of this interface */
51 #define FUSE_KERNEL_MINOR_VERSION 8
53 /** The node ID of the root inode */
54 #define FUSE_ROOT_ID 1
56 /** The major number of the fuse character device */
57 #define FUSE_MAJOR MISC_MAJOR
59 /** The minor number of the fuse character device */
60 #define FUSE_MINOR 229
62 /* Make sure all structures are padded to 64bit boundary, so 32bit
63 userspace works under 64bit kernels */
95 struct fuse_file_lock {
103 * Bitmasks for fuse_setattr_in.valid
105 #define FATTR_MODE (1 << 0)
106 #define FATTR_UID (1 << 1)
107 #define FATTR_GID (1 << 2)
108 #define FATTR_SIZE (1 << 3)
109 #define FATTR_ATIME (1 << 4)
110 #define FATTR_MTIME (1 << 5)
111 #define FATTR_FH (1 << 6)
114 * Flags returned by the OPEN request
116 * FOPEN_DIRECT_IO: bypass page cache for this open file
117 * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
119 #define FOPEN_DIRECT_IO (1 << 0)
120 #define FOPEN_KEEP_CACHE (1 << 1)
123 * INIT request/reply flags
125 #define FUSE_ASYNC_READ (1 << 0)
126 #define FUSE_POSIX_LOCKS (1 << 1)
131 #define FUSE_RELEASE_FLUSH (1 << 0)
135 FUSE_FORGET = 2, /* no reply */
155 FUSE_REMOVEXATTR = 24,
160 FUSE_RELEASEDIR = 29,
172 /* The read buffer is required to be at least 8k, but may be much larger */
173 #define FUSE_MIN_READ_BUFFER 8192
175 struct fuse_entry_out {
176 __u64 nodeid; /* Inode ID */
177 __u64 generation; /* Inode generation: nodeid:gen must
178 be unique for the fs's lifetime */
179 __u64 entry_valid; /* Cache timeout for the name */
180 __u64 attr_valid; /* Cache timeout for the attributes */
181 __u32 entry_valid_nsec;
182 __u32 attr_valid_nsec;
183 struct fuse_attr attr;
186 struct fuse_forget_in {
190 struct fuse_attr_out {
191 __u64 attr_valid; /* Cache timeout for the attributes */
192 __u32 attr_valid_nsec;
194 struct fuse_attr attr;
197 struct fuse_mkdir_in {
202 struct fuse_rename_in {
206 struct fuse_link_in {
210 struct fuse_setattr_in {
229 struct fuse_open_in {
234 struct fuse_open_out {
240 struct fuse_release_in {
247 struct fuse_flush_in {
254 struct fuse_read_in {
261 struct fuse_write_in {
268 struct fuse_write_out {
273 #define FUSE_COMPAT_STATFS_SIZE 48
275 struct fuse_statfs_out {
276 struct fuse_kstatfs st;
279 struct fuse_fsync_in {
285 struct fuse_setxattr_in {
290 struct fuse_getxattr_in {
295 struct fuse_getxattr_out {
303 struct fuse_file_lock lk;
307 struct fuse_file_lock lk;
310 struct fuse_access_in {
315 struct fuse_init_in {
322 struct fuse_init_out {
331 struct fuse_interrupt_in {
335 struct fuse_bmap_in {
341 struct fuse_bmap_out {
345 struct fuse_in_header {
356 struct fuse_out_header {
370 #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
371 #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
372 #define FUSE_DIRENT_SIZE(d) \
373 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)