added a lot of printk output to ease writing of emulator
[linux-2.4.21-pre4.git] / include / linux / nfs_xdr.h
1 #ifndef _LINUX_NFS_XDR_H
2 #define _LINUX_NFS_XDR_H
3
4 struct nfs_fattr {
5         unsigned short          valid;          /* which fields are valid */
6         __u64                   pre_size;       /* pre_op_attr.size       */
7         __u64                   pre_mtime;      /* pre_op_attr.mtime      */
8         __u64                   pre_ctime;      /* pre_op_attr.ctime      */
9         enum nfs_ftype          type;           /* always use NFSv2 types */
10         __u32                   mode;
11         __u32                   nlink;
12         __u32                   uid;
13         __u32                   gid;
14         __u64                   size;
15         union {
16                 struct {
17                         __u32   blocksize;
18                         __u32   blocks;
19                 } nfs2;
20                 struct {
21                         __u64   used;
22                 } nfs3;
23         } du;
24         __u32                   rdev;
25         __u64                   fsid;
26         __u64                   fileid;
27         __u64                   atime;
28         __u64                   mtime;
29         __u64                   ctime;
30 };
31
32 #define NFS_ATTR_WCC            0x0001          /* pre-op WCC data    */
33 #define NFS_ATTR_FATTR          0x0002          /* post-op attributes */
34 #define NFS_ATTR_FATTR_V3       0x0004          /* NFSv3 attributes */
35
36 /*
37  * Info on the file system
38  */
39 struct nfs_fsinfo {
40         __u32                   rtmax;  /* max.  read transfer size */
41         __u32                   rtpref; /* pref. read transfer size */
42         __u32                   rtmult; /* reads should be multiple of this */
43         __u32                   wtmax;  /* max.  write transfer size */
44         __u32                   wtpref; /* pref. write transfer size */
45         __u32                   wtmult; /* writes should be multiple of this */
46         __u32                   dtpref; /* pref. readdir transfer size */
47         __u64                   maxfilesize;
48         __u64                   bsize;  /* block size */
49         __u64                   tbytes; /* total size in bytes */
50         __u64                   fbytes; /* # of free bytes */
51         __u64                   abytes; /* # of bytes available to user */
52         __u64                   tfiles; /* # of files */
53         __u64                   ffiles; /* # of free files */
54         __u64                   afiles; /* # of files available to user */
55         __u32                   linkmax;/* max # of hard links */
56         __u32                   namelen;/* max name length */
57 };
58
59 /* Arguments to the read call.
60  * Note that NFS_READ_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h
61  */
62 #define NFS_READ_MAXIOV 8
63
64 struct nfs_readargs {
65         struct nfs_fh *         fh;
66         __u64                   offset;
67         __u32                   count;
68         unsigned int            pgbase;
69         struct page **          pages;
70 };
71
72 struct nfs_readres {
73         struct nfs_fattr *      fattr;
74         __u32                   count;
75         int                     eof;
76 };
77
78 /* Arguments to the write call.
79  * Note that NFS_WRITE_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h
80  */
81 #define NFS_WRITE_MAXIOV        8
82 struct nfs_writeargs {
83         struct nfs_fh *         fh;
84         __u64                   offset;
85         __u32                   count;
86         enum nfs3_stable_how    stable;
87         unsigned int            pgbase;
88         struct page **          pages;
89 };
90
91 struct nfs_writeverf {
92         enum nfs3_stable_how    committed;
93         __u32                   verifier[2];
94 };
95
96 struct nfs_writeres {
97         struct nfs_fattr *      fattr;
98         struct nfs_writeverf *  verf;
99         __u32                   count;
100 };
101
102 /*
103  * Argument struct for decode_entry function
104  */
105 struct nfs_entry {
106         __u64                   ino;
107         __u64                   cookie,
108                                 prev_cookie;
109         const char *            name;
110         unsigned int            len;
111         int                     eof;
112         struct nfs_fh           fh;
113         struct nfs_fattr        fattr;
114 };
115
116 /*
117  * The following types are for NFSv2 only.
118  */
119 struct nfs_sattrargs {
120         struct nfs_fh *         fh;
121         struct iattr *          sattr;
122 };
123
124 struct nfs_diropargs {
125         struct nfs_fh *         fh;
126         const char *            name;
127         unsigned int            len;
128 };
129
130 struct nfs_createargs {
131         struct nfs_fh *         fh;
132         const char *            name;
133         unsigned int            len;
134         struct iattr *          sattr;
135 };
136
137 struct nfs_renameargs {
138         struct nfs_fh *         fromfh;
139         const char *            fromname;
140         unsigned int            fromlen;
141         struct nfs_fh *         tofh;
142         const char *            toname;
143         unsigned int            tolen;
144 };
145
146 struct nfs_linkargs {
147         struct nfs_fh *         fromfh;
148         struct nfs_fh *         tofh;
149         const char *            toname;
150         unsigned int            tolen;
151 };
152
153 struct nfs_symlinkargs {
154         struct nfs_fh *         fromfh;
155         const char *            fromname;
156         unsigned int            fromlen;
157         const char *            topath;
158         unsigned int            tolen;
159         struct iattr *          sattr;
160 };
161
162 struct nfs_readdirargs {
163         struct nfs_fh *         fh;
164         __u32                   cookie;
165         unsigned int            count;
166         struct page **          pages;
167 };
168
169 struct nfs_diropok {
170         struct nfs_fh *         fh;
171         struct nfs_fattr *      fattr;
172 };
173
174 struct nfs_readlinkargs {
175         struct nfs_fh *         fh;
176         unsigned int            count;
177         struct page **          pages;
178 };
179
180 struct nfs3_sattrargs {
181         struct nfs_fh *         fh;
182         struct iattr *          sattr;
183         unsigned int            guard;
184         __u64                   guardtime;
185 };
186
187 struct nfs3_diropargs {
188         struct nfs_fh *         fh;
189         const char *            name;
190         unsigned int            len;
191 };
192
193 struct nfs3_accessargs {
194         struct nfs_fh *         fh;
195         __u32                   access;
196 };
197
198 struct nfs3_createargs {
199         struct nfs_fh *         fh;
200         const char *            name;
201         unsigned int            len;
202         struct iattr *          sattr;
203         enum nfs3_createmode    createmode;
204         __u32                   verifier[2];
205 };
206
207 struct nfs3_mkdirargs {
208         struct nfs_fh *         fh;
209         const char *            name;
210         unsigned int            len;
211         struct iattr *          sattr;
212 };
213
214 struct nfs3_symlinkargs {
215         struct nfs_fh *         fromfh;
216         const char *            fromname;
217         unsigned int            fromlen;
218         const char *            topath;
219         unsigned int            tolen;
220         struct iattr *          sattr;
221 };
222
223 struct nfs3_mknodargs {
224         struct nfs_fh *         fh;
225         const char *            name;
226         unsigned int            len;
227         enum nfs3_ftype         type;
228         struct iattr *          sattr;
229         dev_t                   rdev;
230 };
231
232 struct nfs3_renameargs {
233         struct nfs_fh *         fromfh;
234         const char *            fromname;
235         unsigned int            fromlen;
236         struct nfs_fh *         tofh;
237         const char *            toname;
238         unsigned int            tolen;
239 };
240
241 struct nfs3_linkargs {
242         struct nfs_fh *         fromfh;
243         struct nfs_fh *         tofh;
244         const char *            toname;
245         unsigned int            tolen;
246 };
247
248 struct nfs3_readdirargs {
249         struct nfs_fh *         fh;
250         __u64                   cookie;
251         __u32                   verf[2];
252         int                     plus;
253         unsigned int            count;
254         struct page **          pages;
255 };
256
257 struct nfs3_diropres {
258         struct nfs_fattr *      dir_attr;
259         struct nfs_fh *         fh;
260         struct nfs_fattr *      fattr;
261 };
262
263 struct nfs3_accessres {
264         struct nfs_fattr *      fattr;
265         __u32                   access;
266 };
267
268 struct nfs3_readlinkargs {
269         struct nfs_fh *         fh;
270         unsigned int            count;
271         struct page **          pages;
272 };
273
274 struct nfs3_renameres {
275         struct nfs_fattr *      fromattr;
276         struct nfs_fattr *      toattr;
277 };
278
279 struct nfs3_linkres {
280         struct nfs_fattr *      dir_attr;
281         struct nfs_fattr *      fattr;
282 };
283
284 struct nfs3_readdirres {
285         struct nfs_fattr *      dir_attr;
286         __u32 *                 verf;
287         int                     plus;
288 };
289
290 /*
291  * RPC procedure vector for NFSv2/NFSv3 demuxing
292  */
293 struct nfs_rpc_ops {
294         int     version;                /* Protocol version */
295
296         int     (*getroot) (struct nfs_server *, struct nfs_fh *,
297                             struct nfs_fattr *);
298         int     (*getattr) (struct inode *, struct nfs_fattr *);
299         int     (*setattr) (struct inode *, struct nfs_fattr *,
300                             struct iattr *);
301         int     (*lookup)  (struct inode *, struct qstr *,
302                             struct nfs_fh *, struct nfs_fattr *);
303         int     (*access)  (struct inode *, int , int);
304         int     (*readlink)(struct inode *, struct page *);
305         int     (*read)    (struct inode *, struct rpc_cred *,
306                             struct nfs_fattr *,
307                             int, unsigned int, unsigned int,
308                             struct page *, int *eofp);
309         int     (*write)   (struct inode *, struct rpc_cred *,
310                             struct nfs_fattr *,
311                             int, unsigned int, unsigned int,
312                             struct page *, struct nfs_writeverf *verfp);
313         int     (*commit)  (struct inode *, struct nfs_fattr *,
314                             unsigned long, unsigned int);
315         int     (*create)  (struct inode *, struct qstr *, struct iattr *,
316                             int, struct nfs_fh *, struct nfs_fattr *);
317         int     (*remove)  (struct inode *, struct qstr *);
318         int     (*unlink_setup)  (struct rpc_message *,
319                             struct dentry *, struct qstr *);
320         void    (*unlink_done) (struct dentry *, struct rpc_message *);
321         int     (*rename)  (struct inode *, struct qstr *,
322                             struct inode *, struct qstr *);
323         int     (*link)    (struct inode *, struct inode *, struct qstr *);
324         int     (*symlink) (struct inode *, struct qstr *, struct qstr *,
325                             struct iattr *, struct nfs_fh *,
326                             struct nfs_fattr *);
327         int     (*mkdir)   (struct inode *, struct qstr *, struct iattr *,
328                             struct nfs_fh *, struct nfs_fattr *);
329         int     (*rmdir)   (struct inode *, struct qstr *);
330         int     (*readdir) (struct inode *, struct rpc_cred *,
331                             u64, struct page *, unsigned int, int);
332         int     (*mknod)   (struct inode *, struct qstr *, struct iattr *,
333                             dev_t, struct nfs_fh *, struct nfs_fattr *);
334         int     (*statfs)  (struct nfs_server *, struct nfs_fh *,
335                             struct nfs_fsinfo *);
336         u32 *   (*decode_dirent)(u32 *, struct nfs_entry *, int plus);
337 };
338
339 /*
340  *      NFS_CALL(getattr, inode, (fattr));
341  * into
342  *      NFS_PROTO(inode)->getattr(fattr);
343  */
344 #define NFS_CALL(op, inode, args)       NFS_PROTO(inode)->op args
345
346 /*
347  * Function vectors etc. for the NFS client
348  */
349 extern struct nfs_rpc_ops       nfs_v2_clientops;
350 extern struct nfs_rpc_ops       nfs_v3_clientops;
351 extern struct rpc_version       nfs_version2;
352 extern struct rpc_version       nfs_version3;
353 extern struct rpc_program       nfs_program;
354 extern struct rpc_stat          nfs_rpcstat;
355
356 #endif