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
35 * - add umask flag to input argument of open, mknod and mkdir
39 #include <sys/types.h>
40 #define __u64 uint64_t
41 #define __u32 uint32_t
44 #include <asm/types.h>
45 #include <linux/major.h>
48 /** Version number of this interface */
49 #define FUSE_KERNEL_VERSION 7
51 /** Minor version number of this interface */
53 #define FUSE_KERNEL_MINOR_VERSION 12
54 #define FUSE_KERNEL_MINOR_FALLBACK 8
56 #define FUSE_KERNEL_MINOR_VERSION 8
59 /** The node ID of the root inode */
60 #define FUSE_ROOT_ID 1
62 /** The major number of the fuse character device */
63 #define FUSE_MAJOR MISC_MAJOR
65 /** The minor number of the fuse character device */
66 #define FUSE_MINOR 229
68 /* Make sure all structures are padded to 64bit boundary, so 32bit
69 userspace works under 64bit kernels */
87 __u64 filling
; /* JPA needed for minor >= 12, but meaning unknown */
104 struct fuse_file_lock
{
108 __u32 pid
; /* tgid */
112 * Bitmasks for fuse_setattr_in.valid
114 #define FATTR_MODE (1 << 0)
115 #define FATTR_UID (1 << 1)
116 #define FATTR_GID (1 << 2)
117 #define FATTR_SIZE (1 << 3)
118 #define FATTR_ATIME (1 << 4)
119 #define FATTR_MTIME (1 << 5)
120 #define FATTR_FH (1 << 6)
123 * Flags returned by the OPEN request
125 * FOPEN_DIRECT_IO: bypass page cache for this open file
126 * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
128 #define FOPEN_DIRECT_IO (1 << 0)
129 #define FOPEN_KEEP_CACHE (1 << 1)
132 * INIT request/reply flags
133 * FUSE_BIG_WRITES: allow big writes to be issued to the file system
134 * FUSE_DONT_MASK: don't apply umask to file mode on create operations
136 #define FUSE_ASYNC_READ (1 << 0)
137 #define FUSE_POSIX_LOCKS (1 << 1)
138 #define FUSE_BIG_WRITES (1 << 5)
139 #define FUSE_DONT_MASK (1 << 6)
144 #define FUSE_RELEASE_FLUSH (1 << 0)
148 FUSE_FORGET
= 2, /* no reply */
168 FUSE_REMOVEXATTR
= 24,
173 FUSE_RELEASEDIR
= 29,
185 /* The read buffer is required to be at least 8k, but may be much larger */
186 #define FUSE_MIN_READ_BUFFER 8192
187 #define FUSE_COMPAT_ENTRY_OUT_SIZE 120 /* JPA */
189 struct fuse_entry_out
{
190 __u64 nodeid
; /* Inode ID */
191 __u64 generation
; /* Inode generation: nodeid:gen must
192 be unique for the fs's lifetime */
193 __u64 entry_valid
; /* Cache timeout for the name */
194 __u64 attr_valid
; /* Cache timeout for the attributes */
195 __u32 entry_valid_nsec
;
196 __u32 attr_valid_nsec
;
197 struct fuse_attr attr
;
200 struct fuse_forget_in
{
204 #define FUSE_COMPAT_FUSE_ATTR_OUT_SIZE 96 /* JPA */
206 struct fuse_attr_out
{
207 __u64 attr_valid
; /* Cache timeout for the attributes */
208 __u32 attr_valid_nsec
;
210 struct fuse_attr attr
;
213 #define FUSE_COMPAT_MKNOD_IN_SIZE 8
215 struct fuse_mknod_in
{
224 struct fuse_mkdir_in
{
229 struct fuse_rename_in
{
233 struct fuse_link_in
{
237 struct fuse_setattr_in
{
256 struct fuse_open_in
{
265 struct fuse_create_in
{
274 struct fuse_open_out
{
280 struct fuse_release_in
{
287 struct fuse_flush_in
{
294 struct fuse_read_in
{
301 #define FUSE_COMPAT_WRITE_IN_SIZE 24 /* JPA */
303 struct fuse_write_in
{
309 __u64 lock_owner
; /* JPA */
310 __u32 flags
; /* JPA */
311 __u32 padding
; /* JPA */
315 struct fuse_write_out
{
320 #define FUSE_COMPAT_STATFS_SIZE 48
322 struct fuse_statfs_out
{
323 struct fuse_kstatfs st
;
326 struct fuse_fsync_in
{
332 struct fuse_setxattr_in
{
337 struct fuse_getxattr_in
{
342 struct fuse_getxattr_out
{
350 struct fuse_file_lock lk
;
354 struct fuse_file_lock lk
;
357 struct fuse_access_in
{
362 struct fuse_init_in
{
369 struct fuse_init_out
{
378 struct fuse_interrupt_in
{
382 struct fuse_bmap_in
{
388 struct fuse_bmap_out
{
392 struct fuse_in_header
{
403 struct fuse_out_header
{
417 #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
418 #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
419 #define FUSE_DIRENT_SIZE(d) \
420 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)