Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
9p
v9fs.h
Go to the documentation of this file.
1
/*
2
* V9FS definitions.
3
*
4
* Copyright (C) 2004-2008 by Eric Van Hensbergen <
[email protected]
>
5
* Copyright (C) 2002 by Ron Minnich <
[email protected]
>
6
*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License version 2
9
* as published by the Free Software Foundation.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to:
18
* Free Software Foundation
19
* 51 Franklin Street, Fifth Floor
20
* Boston, MA 02111-1301 USA
21
*
22
*/
23
#ifndef FS_9P_V9FS_H
24
#define FS_9P_V9FS_H
25
26
#include <
linux/backing-dev.h
>
27
41
#define V9FS_ACCESS_ANY (V9FS_ACCESS_SINGLE | \
42
V9FS_ACCESS_USER | \
43
V9FS_ACCESS_CLIENT)
44
#define V9FS_ACCESS_MASK V9FS_ACCESS_ANY
45
#define V9FS_ACL_MASK V9FS_POSIX_ACL
46
47
enum
p9_session_flags
{
48
V9FS_PROTO_2000U
= 0x01,
49
V9FS_PROTO_2000L
= 0x02,
50
V9FS_ACCESS_SINGLE
= 0x04,
51
V9FS_ACCESS_USER
= 0x08,
52
V9FS_ACCESS_CLIENT
= 0x10,
53
V9FS_POSIX_ACL
= 0x20
54
};
55
56
/* possible values of ->cache */
65
enum
p9_cache_modes
{
66
CACHE_NONE
,
67
CACHE_LOOSE
,
68
CACHE_FSCACHE
,
69
};
70
97
struct
v9fs_session_info
{
98
/* options */
99
unsigned
char
flags
;
100
unsigned
char
nodev
;
101
unsigned
short
debug
;
102
unsigned
int
afid
;
103
unsigned
int
cache
;
104
#ifdef CONFIG_9P_FSCACHE
105
char
*cachetag;
106
struct
fscache_cookie
*fscache;
107
#endif
108
109
char
*
uname
;
/* user name to mount as */
110
char
*
aname
;
/* name of remote hierarchy being mounted */
111
unsigned
int
maxdata
;
/* max data for client interface */
112
unsigned
int
dfltuid
;
/* default uid/muid for legacy support */
113
unsigned
int
dfltgid
;
/* default gid for legacy support */
114
u32
uid
;
/* if ACCESS_SINGLE, the uid that has access */
115
struct
p9_client
*
clnt
;
/* 9p client */
116
struct
list_head
slist
;
/* list of sessions registered with v9fs */
117
struct
backing_dev_info
bdi
;
118
struct
rw_semaphore
rename_sem
;
119
};
120
121
/* cache_validity flags */
122
#define V9FS_INO_INVALID_ATTR 0x01
123
124
struct
v9fs_inode
{
125
#ifdef CONFIG_9P_FSCACHE
126
spinlock_t
fscache_lock;
127
struct
fscache_cookie
*fscache;
128
#endif
129
struct
p9_qid
qid
;
130
unsigned
int
cache_validity
;
131
struct
p9_fid
*
writeback_fid
;
132
struct
mutex
v_mutex
;
133
struct
inode
vfs_inode
;
134
};
135
136
static
inline
struct
v9fs_inode
*V9FS_I(
const
struct
inode
*
inode
)
137
{
138
return
container_of
(inode,
struct
v9fs_inode
,
vfs_inode
);
139
}
140
141
struct
p9_fid
*
v9fs_session_init
(
struct
v9fs_session_info
*,
const
char
*,
142
char
*);
143
extern
void
v9fs_session_close
(
struct
v9fs_session_info
*v9ses);
144
extern
void
v9fs_session_cancel
(
struct
v9fs_session_info
*v9ses);
145
extern
void
v9fs_session_begin_cancel
(
struct
v9fs_session_info
*v9ses);
146
extern
struct
dentry
*
v9fs_vfs_lookup
(
struct
inode
*dir,
struct
dentry
*
dentry
,
147
unsigned
int
flags
);
148
extern
int
v9fs_vfs_unlink
(
struct
inode
*
i
,
struct
dentry
*
d
);
149
extern
int
v9fs_vfs_rmdir
(
struct
inode
*
i
,
struct
dentry
*
d
);
150
extern
int
v9fs_vfs_rename
(
struct
inode
*old_dir,
struct
dentry
*old_dentry,
151
struct
inode
*new_dir,
struct
dentry
*new_dentry);
152
extern
void
v9fs_vfs_put_link
(
struct
dentry
*
dentry
,
struct
nameidata
*nd,
153
void
*
p
);
154
extern
struct
inode
*
v9fs_inode_from_fid
(
struct
v9fs_session_info
*v9ses,
155
struct
p9_fid
*
fid
,
156
struct
super_block
*
sb
,
int
new
);
157
extern
const
struct
inode_operations
v9fs_dir_inode_operations_dotl
;
158
extern
const
struct
inode_operations
v9fs_file_inode_operations_dotl
;
159
extern
const
struct
inode_operations
v9fs_symlink_inode_operations_dotl
;
160
extern
struct
inode
*
v9fs_inode_from_fid_dotl
(
struct
v9fs_session_info
*v9ses,
161
struct
p9_fid
*
fid
,
162
struct
super_block
*
sb
,
int
new
);
163
164
/* other default globals */
165
#define V9FS_PORT 564
166
#define V9FS_DEFUSER "nobody"
167
#define V9FS_DEFANAME ""
168
#define V9FS_DEFUID (-2)
169
#define V9FS_DEFGID (-2)
170
171
static
inline
struct
v9fs_session_info
*v9fs_inode2v9ses(
struct
inode
*
inode
)
172
{
173
return
(inode->
i_sb
->s_fs_info);
174
}
175
176
static
inline
struct
v9fs_session_info
*v9fs_dentry2v9ses(
struct
dentry
*
dentry
)
177
{
178
return
dentry->
d_sb
->s_fs_info;
179
}
180
181
static
inline
int
v9fs_proto_dotu(
struct
v9fs_session_info
*v9ses)
182
{
183
return
v9ses->
flags
&
V9FS_PROTO_2000U
;
184
}
185
186
static
inline
int
v9fs_proto_dotl(
struct
v9fs_session_info
*v9ses)
187
{
188
return
v9ses->
flags
&
V9FS_PROTO_2000L
;
189
}
190
199
static
inline
struct
inode
*
200
v9fs_get_inode_from_fid(
struct
v9fs_session_info
*v9ses,
struct
p9_fid
*
fid
,
201
struct
super_block
*
sb
)
202
{
203
if
(v9fs_proto_dotl(v9ses))
204
return
v9fs_inode_from_fid_dotl
(v9ses, fid, sb, 0);
205
else
206
return
v9fs_inode_from_fid
(v9ses, fid, sb, 0);
207
}
208
217
static
inline
struct
inode
*
218
v9fs_get_new_inode_from_fid(
struct
v9fs_session_info
*v9ses,
struct
p9_fid
*fid,
219
struct
super_block
*sb)
220
{
221
if
(v9fs_proto_dotl(v9ses))
222
return
v9fs_inode_from_fid_dotl
(v9ses, fid, sb, 1);
223
else
224
return
v9fs_inode_from_fid
(v9ses, fid, sb, 1);
225
}
226
227
#endif
Generated on Thu Jan 10 2013 14:44:11 for Linux Kernel by
1.8.2