Blame view
fs/9p/v9fs.h
7.23 KB
9e82cf6a8 [PATCH] v9fs: VFS... |
1 2 3 |
/* * V9FS definitions. * |
8a0dc95fd 9p: transport API... |
4 |
* Copyright (C) 2004-2008 by Eric Van Hensbergen <ericvh@gmail.com> |
9e82cf6a8 [PATCH] v9fs: VFS... |
5 6 7 |
* Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov> * * This program is free software; you can redistribute it and/or modify |
42e8c509c [PATCH] v9fs: upd... |
8 9 |
* it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. |
9e82cf6a8 [PATCH] v9fs: VFS... |
10 11 12 13 14 15 16 17 18 19 20 21 22 |
* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to: * Free Software Foundation * 51 Franklin Street, Fifth Floor * Boston, MA 02111-1301 USA * */ |
e0459f57b fs/9p: Prevent mu... |
23 24 |
#ifndef FS_9P_V9FS_H #define FS_9P_V9FS_H |
0ed07ddb5 9p: add bdi backi... |
25 |
#include <linux/backing-dev.h> |
9e82cf6a8 [PATCH] v9fs: VFS... |
26 |
|
ee443996a 9p: Documentation... |
27 28 |
/** * enum p9_session_flags - option flags for each 9P session |
dd6102fbd 9P2010.L handshak... |
29 |
* @V9FS_PROTO_2000U: whether or not to use 9P2000.u extensions |
45bc21edb 9p: Change the na... |
30 |
* @V9FS_PROTO_2000L: whether or not to use 9P2000.l extensions |
ee443996a 9p: Documentation... |
31 32 |
* @V9FS_ACCESS_SINGLE: only the mounting user can access the hierarchy * @V9FS_ACCESS_USER: a new attach will be issued for every user (default) |
e782ef710 [fs/9P] Add posix... |
33 |
* @V9FS_ACCESS_CLIENT: Just like user, but access check is performed on client. |
ee443996a 9p: Documentation... |
34 35 |
* @V9FS_ACCESS_ANY: use a single attach for all users * @V9FS_ACCESS_MASK: bit mask of different ACCESS options |
e782ef710 [fs/9P] Add posix... |
36 |
* @V9FS_POSIX_ACL: POSIX ACLs are enforced |
ee443996a 9p: Documentation... |
37 38 39 |
* * Session flags reflect options selected by users at mount time */ |
76381a42e fs/9p: Add access... |
40 41 42 43 |
#define V9FS_ACCESS_ANY (V9FS_ACCESS_SINGLE | \ V9FS_ACCESS_USER | \ V9FS_ACCESS_CLIENT) #define V9FS_ACCESS_MASK V9FS_ACCESS_ANY |
e782ef710 [fs/9P] Add posix... |
44 |
#define V9FS_ACL_MASK V9FS_POSIX_ACL |
76381a42e fs/9p: Add access... |
45 |
|
ee443996a 9p: Documentation... |
46 |
enum p9_session_flags { |
dd6102fbd 9P2010.L handshak... |
47 |
V9FS_PROTO_2000U = 0x01, |
45bc21edb 9p: Change the na... |
48 |
V9FS_PROTO_2000L = 0x02, |
dd6102fbd 9P2010.L handshak... |
49 50 |
V9FS_ACCESS_SINGLE = 0x04, V9FS_ACCESS_USER = 0x08, |
e782ef710 [fs/9P] Add posix... |
51 52 |
V9FS_ACCESS_CLIENT = 0x10, V9FS_POSIX_ACL = 0x20 |
ee443996a 9p: Documentation... |
53 54 55 56 57 58 59 60 61 62 63 64 65 |
}; /* possible values of ->cache */ /** * enum p9_cache_modes - user specified cache preferences * @CACHE_NONE: do not cache data, dentries, or directory contents (default) * @CACHE_LOOSE: cache data, dentries, and directory contents w/no consistency * * eventually support loose, tight, time, session, default always none */ enum p9_cache_modes { CACHE_NONE, |
fb89b45cd 9P: introduction ... |
66 |
CACHE_MMAP, |
ee443996a 9p: Documentation... |
67 |
CACHE_LOOSE, |
60e78d2c9 9p: Add fscache s... |
68 |
CACHE_FSCACHE, |
ee443996a 9p: Documentation... |
69 70 71 72 73 74 75 76 77 |
}; /** * struct v9fs_session_info - per-instance session information * @flags: session options of type &p9_session_flags * @nodev: set to 1 to disable device mapping * @debug: debug level * @afid: authentication handle * @cache: cache mode of type &p9_cache_modes |
60e78d2c9 9p: Add fscache s... |
78 79 |
* @cachetag: the tag of the cache associated with this session * @fscache: session cookie associated with FS-Cache |
ee443996a 9p: Documentation... |
80 81 82 83 84 85 86 |
* @uname: string user name to mount hierarchy as * @aname: mount specifier for remote hierarchy * @maxdata: maximum data to be sent/recvd per protocol message * @dfltuid: default numeric userid to mount hierarchy as * @dfltgid: default numeric groupid to mount hierarchy as * @uid: if %V9FS_ACCESS_SINGLE, the numeric uid which mounted the hierarchy * @clnt: reference to 9P network client instantiated for this session |
60e78d2c9 9p: Add fscache s... |
87 |
* @slist: reference to list of registered 9p sessions |
ee443996a 9p: Documentation... |
88 89 90 91 92 93 94 |
* * This structure holds state for each session instance established during * a sys_mount() . * * Bugs: there seems to be a lot of state which could be condensed and/or * removed. */ |
9e82cf6a8 [PATCH] v9fs: VFS... |
95 96 97 |
struct v9fs_session_info { /* options */ |
ee443996a 9p: Documentation... |
98 99 100 101 102 |
unsigned char flags; unsigned char nodev; unsigned short debug; unsigned int afid; unsigned int cache; |
60e78d2c9 9p: Add fscache s... |
103 104 105 106 |
#ifdef CONFIG_9P_FSCACHE char *cachetag; struct fscache_cookie *fscache; #endif |
9e82cf6a8 [PATCH] v9fs: VFS... |
107 |
|
ba17674fe 9p: attach-per-user |
108 109 |
char *uname; /* user name to mount as */ char *aname; /* name of remote hierarchy being mounted */ |
8a0dc95fd 9p: transport API... |
110 |
unsigned int maxdata; /* max data for client interface */ |
76ed23a5d 9p: Modify struct... |
111 112 113 |
kuid_t dfltuid; /* default uid/muid for legacy support */ kgid_t dfltgid; /* default gid for legacy support */ kuid_t uid; /* if ACCESS_SINGLE, the uid that has access */ |
bd238fb43 9p: Reorganizatio... |
114 |
struct p9_client *clnt; /* 9p client */ |
60e78d2c9 9p: Add fscache s... |
115 |
struct list_head slist; /* list of sessions registered with v9fs */ |
a534c8d15 fs/9p: Prevent pa... |
116 |
struct rw_semaphore rename_sem; |
9e82cf6a8 [PATCH] v9fs: VFS... |
117 |
}; |
b3cbea03b fs/9p: Add suppor... |
118 119 |
/* cache_validity flags */ #define V9FS_INO_INVALID_ATTR 0x01 |
a78ce05d5 fs/9p: Add v9fs_i... |
120 121 |
struct v9fs_inode { #ifdef CONFIG_9P_FSCACHE |
8f5fed1e9 fs/9p: use fscach... |
122 |
struct mutex fscache_lock; |
a78ce05d5 fs/9p: Add v9fs_i... |
123 |
struct fscache_cookie *fscache; |
a78ce05d5 fs/9p: Add v9fs_i... |
124 |
#endif |
fd2421f54 fs/9p: When doing... |
125 |
struct p9_qid qid; |
b3cbea03b fs/9p: Add suppor... |
126 |
unsigned int cache_validity; |
6b39f6d22 fs/9p: Move write... |
127 |
struct p9_fid *writeback_fid; |
5a7e0a8cf fs/9p: Fix race i... |
128 |
struct mutex v_mutex; |
a78ce05d5 fs/9p: Add v9fs_i... |
129 130 131 132 133 134 135 |
struct inode vfs_inode; }; static inline struct v9fs_inode *V9FS_I(const struct inode *inode) { return container_of(inode, struct v9fs_inode, vfs_inode); } |
bd238fb43 9p: Reorganizatio... |
136 137 |
struct p9_fid *v9fs_session_init(struct v9fs_session_info *, const char *, char *); |
53c06f4e0 fs/9p: Move dotl ... |
138 139 140 141 |
extern void v9fs_session_close(struct v9fs_session_info *v9ses); extern void v9fs_session_cancel(struct v9fs_session_info *v9ses); extern void v9fs_session_begin_cancel(struct v9fs_session_info *v9ses); extern struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry, |
00cd8dd3b stop passing name... |
142 |
unsigned int flags); |
53c06f4e0 fs/9p: Move dotl ... |
143 144 145 |
extern int v9fs_vfs_unlink(struct inode *i, struct dentry *d); extern int v9fs_vfs_rmdir(struct inode *i, struct dentry *d); extern int v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry, |
1cd66c93b fs: make remainin... |
146 147 |
struct inode *new_dir, struct dentry *new_dentry, unsigned int flags); |
a78ce05d5 fs/9p: Add v9fs_i... |
148 149 |
extern struct inode *v9fs_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid, |
ed80fcfac fs/9p: Always ask... |
150 |
struct super_block *sb, int new); |
53c06f4e0 fs/9p: Move dotl ... |
151 152 153 |
extern const struct inode_operations v9fs_dir_inode_operations_dotl; extern const struct inode_operations v9fs_file_inode_operations_dotl; extern const struct inode_operations v9fs_symlink_inode_operations_dotl; |
a78ce05d5 fs/9p: Add v9fs_i... |
154 155 |
extern struct inode *v9fs_inode_from_fid_dotl(struct v9fs_session_info *v9ses, struct p9_fid *fid, |
ed80fcfac fs/9p: Always ask... |
156 |
struct super_block *sb, int new); |
9e82cf6a8 [PATCH] v9fs: VFS... |
157 |
|
9e82cf6a8 [PATCH] v9fs: VFS... |
158 |
/* other default globals */ |
bd32b82df 9p: rename uid an... |
159 |
#define V9FS_PORT 564 |
9e82cf6a8 [PATCH] v9fs: VFS... |
160 161 |
#define V9FS_DEFUSER "nobody" #define V9FS_DEFANAME "" |
76ed23a5d 9p: Modify struct... |
162 163 |
#define V9FS_DEFUID KUIDT_INIT(-2) #define V9FS_DEFGID KGIDT_INIT(-2) |
9e82cf6a8 [PATCH] v9fs: VFS... |
164 |
|
bd238fb43 9p: Reorganizatio... |
165 166 167 168 |
static inline struct v9fs_session_info *v9fs_inode2v9ses(struct inode *inode) { return (inode->i_sb->s_fs_info); } |
2405669b2 9p: define sessio... |
169 |
|
42869c8ad fs/9p: Add v9fs_d... |
170 171 172 173 |
static inline struct v9fs_session_info *v9fs_dentry2v9ses(struct dentry *dentry) { return dentry->d_sb->s_fs_info; } |
dd6102fbd 9P2010.L handshak... |
174 |
static inline int v9fs_proto_dotu(struct v9fs_session_info *v9ses) |
2405669b2 9p: define sessio... |
175 |
{ |
dd6102fbd 9P2010.L handshak... |
176 177 178 179 180 |
return v9ses->flags & V9FS_PROTO_2000U; } static inline int v9fs_proto_dotl(struct v9fs_session_info *v9ses) { |
45bc21edb 9p: Change the na... |
181 |
return v9ses->flags & V9FS_PROTO_2000L; |
2405669b2 9p: define sessio... |
182 |
} |
53c06f4e0 fs/9p: Move dotl ... |
183 184 |
/** |
a78ce05d5 fs/9p: Add v9fs_i... |
185 |
* v9fs_get_inode_from_fid - Helper routine to populate an inode by |
53c06f4e0 fs/9p: Move dotl ... |
186 187 188 189 190 191 192 |
* issuing a attribute request * @v9ses: session information * @fid: fid to issue attribute request for * @sb: superblock on which to create inode * */ static inline struct inode * |
a78ce05d5 fs/9p: Add v9fs_i... |
193 194 |
v9fs_get_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid, struct super_block *sb) |
53c06f4e0 fs/9p: Move dotl ... |
195 196 |
{ if (v9fs_proto_dotl(v9ses)) |
ed80fcfac fs/9p: Always ask... |
197 |
return v9fs_inode_from_fid_dotl(v9ses, fid, sb, 0); |
53c06f4e0 fs/9p: Move dotl ... |
198 |
else |
ed80fcfac fs/9p: Always ask... |
199 |
return v9fs_inode_from_fid(v9ses, fid, sb, 0); |
53c06f4e0 fs/9p: Move dotl ... |
200 |
} |
ed80fcfac fs/9p: Always ask... |
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
/** * v9fs_get_new_inode_from_fid - Helper routine to populate an inode by * issuing a attribute request * @v9ses: session information * @fid: fid to issue attribute request for * @sb: superblock on which to create inode * */ static inline struct inode * v9fs_get_new_inode_from_fid(struct v9fs_session_info *v9ses, struct p9_fid *fid, struct super_block *sb) { if (v9fs_proto_dotl(v9ses)) return v9fs_inode_from_fid_dotl(v9ses, fid, sb, 1); else return v9fs_inode_from_fid(v9ses, fid, sb, 1); } |
e0459f57b fs/9p: Prevent mu... |
219 |
#endif |