[PATCH] FUSE - read-only operations
[linux-block.git] / include / linux / fuse.h
CommitLineData
d8a5ba45
MS
1/*
2 FUSE: Filesystem in Userspace
3 Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu>
4
5 This program can be distributed under the terms of the GNU GPL.
6 See the file COPYING.
7*/
8
9/* This file defines the kernel interface of FUSE */
10
11#include <asm/types.h>
12
13/** Version number of this interface */
334f485d 14#define FUSE_KERNEL_VERSION 6
d8a5ba45
MS
15
16/** Minor version number of this interface */
17#define FUSE_KERNEL_MINOR_VERSION 1
18
19/** The node ID of the root inode */
20#define FUSE_ROOT_ID 1
21
334f485d
MS
22/** The major number of the fuse character device */
23#define FUSE_MAJOR 10
24
25/** The minor number of the fuse character device */
26#define FUSE_MINOR 229
27
d8a5ba45
MS
28struct fuse_attr {
29 __u64 ino;
30 __u64 size;
31 __u64 blocks;
32 __u64 atime;
33 __u64 mtime;
34 __u64 ctime;
35 __u32 atimensec;
36 __u32 mtimensec;
37 __u32 ctimensec;
38 __u32 mode;
39 __u32 nlink;
40 __u32 uid;
41 __u32 gid;
42 __u32 rdev;
43};
44
e5e5558e
MS
45struct fuse_kstatfs {
46 __u64 blocks;
47 __u64 bfree;
48 __u64 bavail;
49 __u64 files;
50 __u64 ffree;
51 __u32 bsize;
52 __u32 namelen;
53};
54
334f485d 55enum fuse_opcode {
e5e5558e
MS
56 FUSE_LOOKUP = 1,
57 FUSE_FORGET = 2, /* no reply */
58 FUSE_GETATTR = 3,
59 FUSE_READLINK = 5,
60 FUSE_GETDIR = 7,
61 FUSE_STATFS = 17,
334f485d
MS
62 FUSE_INIT = 26
63};
64
65/* Conservative buffer size for the client */
66#define FUSE_MAX_IN 8192
67
e5e5558e
MS
68#define FUSE_NAME_MAX 1024
69
70struct fuse_entry_out {
71 __u64 nodeid; /* Inode ID */
72 __u64 generation; /* Inode generation: nodeid:gen must
73 be unique for the fs's lifetime */
74 __u64 entry_valid; /* Cache timeout for the name */
75 __u64 attr_valid; /* Cache timeout for the attributes */
76 __u32 entry_valid_nsec;
77 __u32 attr_valid_nsec;
78 struct fuse_attr attr;
79};
80
81struct fuse_forget_in {
82 __u64 version;
83};
84
85struct fuse_attr_out {
86 __u64 attr_valid; /* Cache timeout for the attributes */
87 __u32 attr_valid_nsec;
88 __u32 dummy;
89 struct fuse_attr attr;
90};
91
92struct fuse_getdir_out {
93 __u32 fd;
94};
95
96struct fuse_statfs_out {
97 struct fuse_kstatfs st;
98};
99
334f485d
MS
100struct fuse_init_in_out {
101 __u32 major;
102 __u32 minor;
103};
104
105struct fuse_in_header {
106 __u32 len;
107 __u32 opcode;
108 __u64 unique;
109 __u64 nodeid;
110 __u32 uid;
111 __u32 gid;
112 __u32 pid;
113};
114
115struct fuse_out_header {
116 __u32 len;
117 __s32 error;
118 __u64 unique;
119};
120
e5e5558e
MS
121struct fuse_dirent {
122 __u64 ino;
123 __u64 off;
124 __u32 namelen;
125 __u32 type;
126 char name[0];
127};
128
129#define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
130#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
131#define FUSE_DIRENT_SIZE(d) \
132 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)