1/****************************************************************************
2 ****************************************************************************
3 ***
4 ***   This header was automatically generated from a Linux kernel header
5 ***   of the same name, to make information necessary for userspace to
6 ***   call into the kernel available to libc.  It contains only constants,
7 ***   structures, and macros generated from the original header, and thus,
8 ***   contains no copyrightable information.
9 ***
10 ****************************************************************************
11 ****************************************************************************/
12#ifndef _LINUX_NFS_XDR_H
13#define _LINUX_NFS_XDR_H
14
15#include <linux/sunrpc/xprt.h>
16#include <linux/nfsacl.h>
17
18#define NFS_MAX_FILE_IO_SIZE (1048576U)
19#define NFS_DEF_FILE_IO_SIZE (4096U)
20#define NFS_MIN_FILE_IO_SIZE (1024U)
21
22struct nfs_fsid {
23 uint64_t major;
24 uint64_t minor;
25};
26
27#define NFS_ATTR_WCC 0x0001
28#define NFS_ATTR_FATTR 0x0002
29#define NFS_ATTR_FATTR_V3 0x0004
30#define NFS_ATTR_FATTR_V4 0x0008
31#define NFS_ATTR_FATTR_V4_REFERRAL 0x0010
32
33struct nfs_fsinfo {
34 struct nfs_fattr *fattr;
35 __u32 rtmax;
36 __u32 rtpref;
37 __u32 rtmult;
38 __u32 wtmax;
39 __u32 wtpref;
40 __u32 wtmult;
41 __u32 dtpref;
42 __u64 maxfilesize;
43 __u32 lease_time;
44};
45
46struct nfs_fsstat {
47 struct nfs_fattr *fattr;
48 __u64 tbytes;
49 __u64 fbytes;
50 __u64 abytes;
51 __u64 tfiles;
52 __u64 ffiles;
53 __u64 afiles;
54};
55
56struct nfs2_fsstat {
57 __u32 tsize;
58 __u32 bsize;
59 __u32 blocks;
60 __u32 bfree;
61 __u32 bavail;
62};
63
64struct nfs_pathconf {
65 struct nfs_fattr *fattr;
66 __u32 max_link;
67 __u32 max_namelen;
68};
69
70struct nfs4_change_info {
71 u32 atomic;
72 u64 before;
73 u64 after;
74};
75
76struct nfs_seqid;
77
78struct nfs_openargs {
79 const struct nfs_fh * fh;
80 struct nfs_seqid * seqid;
81 int open_flags;
82 __u64 clientid;
83 __u32 id;
84 union {
85 struct iattr * attrs;
86 nfs4_verifier verifier;
87 nfs4_stateid delegation;
88 int delegation_type;
89 } u;
90 const struct qstr * name;
91 const struct nfs_server *server;
92 const u32 * bitmask;
93 __u32 claim;
94};
95
96struct nfs_openres {
97 nfs4_stateid stateid;
98 struct nfs_fh fh;
99 struct nfs4_change_info cinfo;
100 __u32 rflags;
101 struct nfs_fattr * f_attr;
102 struct nfs_fattr * dir_attr;
103 const struct nfs_server *server;
104 int delegation_type;
105 nfs4_stateid delegation;
106 __u32 do_recall;
107 __u64 maxsize;
108};
109
110struct nfs_open_confirmargs {
111 const struct nfs_fh * fh;
112 nfs4_stateid * stateid;
113 struct nfs_seqid * seqid;
114};
115
116struct nfs_open_confirmres {
117 nfs4_stateid stateid;
118};
119
120struct nfs_closeargs {
121 struct nfs_fh * fh;
122 nfs4_stateid * stateid;
123 struct nfs_seqid * seqid;
124 int open_flags;
125 const u32 * bitmask;
126};
127
128struct nfs_closeres {
129 nfs4_stateid stateid;
130 struct nfs_fattr * fattr;
131 const struct nfs_server *server;
132};
133
134struct nfs_lowner {
135 __u64 clientid;
136 u32 id;
137};
138
139struct nfs_lock_args {
140 struct nfs_fh * fh;
141 struct file_lock * fl;
142 struct nfs_seqid * lock_seqid;
143 nfs4_stateid * lock_stateid;
144 struct nfs_seqid * open_seqid;
145 nfs4_stateid * open_stateid;
146 struct nfs_lowner lock_owner;
147 unsigned char block : 1;
148 unsigned char reclaim : 1;
149 unsigned char new_lock_owner : 1;
150};
151
152struct nfs_lock_res {
153 nfs4_stateid stateid;
154};
155
156struct nfs_locku_args {
157 struct nfs_fh * fh;
158 struct file_lock * fl;
159 struct nfs_seqid * seqid;
160 nfs4_stateid * stateid;
161};
162
163struct nfs_locku_res {
164 nfs4_stateid stateid;
165};
166
167struct nfs_lockt_args {
168 struct nfs_fh * fh;
169 struct file_lock * fl;
170 struct nfs_lowner lock_owner;
171};
172
173struct nfs_lockt_res {
174 struct file_lock * denied;
175};
176
177struct nfs4_delegreturnargs {
178 const struct nfs_fh *fhandle;
179 const nfs4_stateid *stateid;
180 const u32 * bitmask;
181};
182
183struct nfs4_delegreturnres {
184 struct nfs_fattr * fattr;
185 const struct nfs_server *server;
186};
187
188struct nfs_readargs {
189 struct nfs_fh * fh;
190 struct nfs_open_context *context;
191 __u64 offset;
192 __u32 count;
193 unsigned int pgbase;
194 struct page ** pages;
195};
196
197struct nfs_readres {
198 struct nfs_fattr * fattr;
199 __u32 count;
200 int eof;
201};
202
203struct nfs_writeargs {
204 struct nfs_fh * fh;
205 struct nfs_open_context *context;
206 __u64 offset;
207 __u32 count;
208 enum nfs3_stable_how stable;
209 unsigned int pgbase;
210 struct page ** pages;
211 const u32 * bitmask;
212};
213
214struct nfs_writeverf {
215 enum nfs3_stable_how committed;
216 __u32 verifier[2];
217};
218
219struct nfs_writeres {
220 struct nfs_fattr * fattr;
221 struct nfs_writeverf * verf;
222 __u32 count;
223 const struct nfs_server *server;
224};
225
226struct nfs_entry {
227 __u64 ino;
228 __u64 cookie,
229 prev_cookie;
230 const char * name;
231 unsigned int len;
232 int eof;
233 struct nfs_fh * fh;
234 struct nfs_fattr * fattr;
235};
236
237struct nfs_sattrargs {
238 struct nfs_fh * fh;
239 struct iattr * sattr;
240};
241
242struct nfs_diropargs {
243 struct nfs_fh * fh;
244 const char * name;
245 unsigned int len;
246};
247
248struct nfs_createargs {
249 struct nfs_fh * fh;
250 const char * name;
251 unsigned int len;
252 struct iattr * sattr;
253};
254
255struct nfs_renameargs {
256 struct nfs_fh * fromfh;
257 const char * fromname;
258 unsigned int fromlen;
259 struct nfs_fh * tofh;
260 const char * toname;
261 unsigned int tolen;
262};
263
264struct nfs_setattrargs {
265 struct nfs_fh * fh;
266 nfs4_stateid stateid;
267 struct iattr * iap;
268 const struct nfs_server * server;
269 const u32 * bitmask;
270};
271
272struct nfs_setaclargs {
273 struct nfs_fh * fh;
274 size_t acl_len;
275 unsigned int acl_pgbase;
276 struct page ** acl_pages;
277};
278
279struct nfs_getaclargs {
280 struct nfs_fh * fh;
281 size_t acl_len;
282 unsigned int acl_pgbase;
283 struct page ** acl_pages;
284};
285
286struct nfs_setattrres {
287 struct nfs_fattr * fattr;
288 const struct nfs_server * server;
289};
290
291struct nfs_linkargs {
292 struct nfs_fh * fromfh;
293 struct nfs_fh * tofh;
294 const char * toname;
295 unsigned int tolen;
296};
297
298struct nfs_symlinkargs {
299 struct nfs_fh * fromfh;
300 const char * fromname;
301 unsigned int fromlen;
302 const char * topath;
303 unsigned int tolen;
304 struct iattr * sattr;
305};
306
307struct nfs_readdirargs {
308 struct nfs_fh * fh;
309 __u32 cookie;
310 unsigned int count;
311 struct page ** pages;
312};
313
314struct nfs3_getaclargs {
315 struct nfs_fh * fh;
316 int mask;
317 struct page ** pages;
318};
319
320struct nfs3_setaclargs {
321 struct inode * inode;
322 int mask;
323 struct posix_acl * acl_access;
324 struct posix_acl * acl_default;
325 struct page ** pages;
326};
327
328struct nfs_diropok {
329 struct nfs_fh * fh;
330 struct nfs_fattr * fattr;
331};
332
333struct nfs_readlinkargs {
334 struct nfs_fh * fh;
335 unsigned int pgbase;
336 unsigned int pglen;
337 struct page ** pages;
338};
339
340struct nfs3_sattrargs {
341 struct nfs_fh * fh;
342 struct iattr * sattr;
343 unsigned int guard;
344 struct timespec guardtime;
345};
346
347struct nfs3_diropargs {
348 struct nfs_fh * fh;
349 const char * name;
350 unsigned int len;
351};
352
353struct nfs3_accessargs {
354 struct nfs_fh * fh;
355 __u32 access;
356};
357
358struct nfs3_createargs {
359 struct nfs_fh * fh;
360 const char * name;
361 unsigned int len;
362 struct iattr * sattr;
363 enum nfs3_createmode createmode;
364 __u32 verifier[2];
365};
366
367struct nfs3_mkdirargs {
368 struct nfs_fh * fh;
369 const char * name;
370 unsigned int len;
371 struct iattr * sattr;
372};
373
374struct nfs3_symlinkargs {
375 struct nfs_fh * fromfh;
376 const char * fromname;
377 unsigned int fromlen;
378 const char * topath;
379 unsigned int tolen;
380 struct iattr * sattr;
381};
382
383struct nfs3_mknodargs {
384 struct nfs_fh * fh;
385 const char * name;
386 unsigned int len;
387 enum nfs3_ftype type;
388 struct iattr * sattr;
389 dev_t rdev;
390};
391
392struct nfs3_renameargs {
393 struct nfs_fh * fromfh;
394 const char * fromname;
395 unsigned int fromlen;
396 struct nfs_fh * tofh;
397 const char * toname;
398 unsigned int tolen;
399};
400
401struct nfs3_linkargs {
402 struct nfs_fh * fromfh;
403 struct nfs_fh * tofh;
404 const char * toname;
405 unsigned int tolen;
406};
407
408struct nfs3_readdirargs {
409 struct nfs_fh * fh;
410 __u64 cookie;
411 __u32 verf[2];
412 int plus;
413 unsigned int count;
414 struct page ** pages;
415};
416
417struct nfs3_diropres {
418 struct nfs_fattr * dir_attr;
419 struct nfs_fh * fh;
420 struct nfs_fattr * fattr;
421};
422
423struct nfs3_accessres {
424 struct nfs_fattr * fattr;
425 __u32 access;
426};
427
428struct nfs3_readlinkargs {
429 struct nfs_fh * fh;
430 unsigned int pgbase;
431 unsigned int pglen;
432 struct page ** pages;
433};
434
435struct nfs3_renameres {
436 struct nfs_fattr * fromattr;
437 struct nfs_fattr * toattr;
438};
439
440struct nfs3_linkres {
441 struct nfs_fattr * dir_attr;
442 struct nfs_fattr * fattr;
443};
444
445struct nfs3_readdirres {
446 struct nfs_fattr * dir_attr;
447 __u32 * verf;
448 int plus;
449};
450
451struct nfs3_getaclres {
452 struct nfs_fattr * fattr;
453 int mask;
454 unsigned int acl_access_count;
455 unsigned int acl_default_count;
456 struct posix_acl * acl_access;
457 struct posix_acl * acl_default;
458};
459
460struct nfs_page;
461
462#define NFS_PAGEVEC_SIZE (8U)
463
464struct nfs_read_data {
465 int flags;
466 struct rpc_task task;
467 struct inode *inode;
468 struct rpc_cred *cred;
469 struct nfs_fattr fattr;
470 struct list_head pages;
471 struct nfs_page *req;
472 struct page **pagevec;
473 unsigned int npages;
474 struct nfs_readargs args;
475 struct nfs_readres res;
476 struct page *page_array[NFS_PAGEVEC_SIZE];
477};
478
479struct nfs_write_data {
480 int flags;
481 struct rpc_task task;
482 struct inode *inode;
483 struct rpc_cred *cred;
484 struct nfs_fattr fattr;
485 struct nfs_writeverf verf;
486 struct list_head pages;
487 struct nfs_page *req;
488 struct page **pagevec;
489 unsigned int npages;
490 struct nfs_writeargs args;
491 struct nfs_writeres res;
492 struct page *page_array[NFS_PAGEVEC_SIZE];
493};
494
495struct nfs_access_entry;
496
497struct nfs_rpc_ops {
498 int version;
499 struct dentry_operations *dentry_ops;
500 struct inode_operations *dir_inode_ops;
501 struct inode_operations *file_inode_ops;
502
503 int (*getroot) (struct nfs_server *, struct nfs_fh *,
504 struct nfs_fsinfo *);
505 int (*getattr) (struct nfs_server *, struct nfs_fh *,
506 struct nfs_fattr *);
507 int (*setattr) (struct dentry *, struct nfs_fattr *,
508 struct iattr *);
509 int (*lookup) (struct inode *, struct qstr *,
510 struct nfs_fh *, struct nfs_fattr *);
511 int (*access) (struct inode *, struct nfs_access_entry *);
512 int (*readlink)(struct inode *, struct page *, unsigned int,
513 unsigned int);
514 int (*read) (struct nfs_read_data *);
515 int (*write) (struct nfs_write_data *);
516 int (*commit) (struct nfs_write_data *);
517 int (*create) (struct inode *, struct dentry *,
518 struct iattr *, int, struct nameidata *);
519 int (*remove) (struct inode *, struct qstr *);
520 int (*unlink_setup) (struct rpc_message *,
521 struct dentry *, struct qstr *);
522 int (*unlink_done) (struct dentry *, struct rpc_task *);
523 int (*rename) (struct inode *, struct qstr *,
524 struct inode *, struct qstr *);
525 int (*link) (struct inode *, struct inode *, struct qstr *);
526 int (*symlink) (struct inode *, struct qstr *, struct qstr *,
527 struct iattr *, struct nfs_fh *,
528 struct nfs_fattr *);
529 int (*mkdir) (struct inode *, struct dentry *, struct iattr *);
530 int (*rmdir) (struct inode *, struct qstr *);
531 int (*readdir) (struct dentry *, struct rpc_cred *,
532 u64, struct page *, unsigned int, int);
533 int (*mknod) (struct inode *, struct dentry *, struct iattr *,
534 dev_t);
535 int (*statfs) (struct nfs_server *, struct nfs_fh *,
536 struct nfs_fsstat *);
537 int (*fsinfo) (struct nfs_server *, struct nfs_fh *,
538 struct nfs_fsinfo *);
539 int (*pathconf) (struct nfs_server *, struct nfs_fh *,
540 struct nfs_pathconf *);
541 u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus);
542 void (*read_setup) (struct nfs_read_data *);
543 int (*read_done) (struct rpc_task *, struct nfs_read_data *);
544 void (*write_setup) (struct nfs_write_data *, int how);
545 int (*write_done) (struct rpc_task *, struct nfs_write_data *);
546 void (*commit_setup) (struct nfs_write_data *, int how);
547 int (*commit_done) (struct rpc_task *, struct nfs_write_data *);
548 int (*file_open) (struct inode *, struct file *);
549 int (*file_release) (struct inode *, struct file *);
550 int (*lock)(struct file *, int, struct file_lock *);
551 void (*clear_acl_cache)(struct inode *);
552};
553
554#define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args
555
556#endif
557