xref: /linux-6.15/include/linux/nfs_xdr.h (revision bcefe12e)
1 #ifndef _LINUX_NFS_XDR_H
2 #define _LINUX_NFS_XDR_H
3 
4 #include <linux/nfsacl.h>
5 
6 /*
7  * To change the maximum rsize and wsize supported by the NFS client, adjust
8  * NFS_MAX_FILE_IO_SIZE.  64KB is a typical maximum, but some servers can
9  * support a megabyte or more.  The default is left at 4096 bytes, which is
10  * reasonable for NFS over UDP.
11  */
12 #define NFS_MAX_FILE_IO_SIZE	(1048576U)
13 #define NFS_DEF_FILE_IO_SIZE	(4096U)
14 #define NFS_MIN_FILE_IO_SIZE	(1024U)
15 
16 struct nfs_fsid {
17 	uint64_t		major;
18 	uint64_t		minor;
19 };
20 
21 /*
22  * Helper for checking equality between 2 fsids.
23  */
24 static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b)
25 {
26 	return a->major == b->major && a->minor == b->minor;
27 }
28 
29 struct nfs_fattr {
30 	unsigned int		valid;		/* which fields are valid */
31 	umode_t			mode;
32 	__u32			nlink;
33 	__u32			uid;
34 	__u32			gid;
35 	dev_t			rdev;
36 	__u64			size;
37 	union {
38 		struct {
39 			__u32	blocksize;
40 			__u32	blocks;
41 		} nfs2;
42 		struct {
43 			__u64	used;
44 		} nfs3;
45 	} du;
46 	struct nfs_fsid		fsid;
47 	__u64			fileid;
48 	struct timespec		atime;
49 	struct timespec		mtime;
50 	struct timespec		ctime;
51 	__u64			change_attr;	/* NFSv4 change attribute */
52 	__u64			pre_change_attr;/* pre-op NFSv4 change attribute */
53 	__u64			pre_size;	/* pre_op_attr.size	  */
54 	struct timespec		pre_mtime;	/* pre_op_attr.mtime	  */
55 	struct timespec		pre_ctime;	/* pre_op_attr.ctime	  */
56 	unsigned long		time_start;
57 	unsigned long		gencount;
58 };
59 
60 #define NFS_ATTR_FATTR_TYPE		(1U << 0)
61 #define NFS_ATTR_FATTR_MODE		(1U << 1)
62 #define NFS_ATTR_FATTR_NLINK		(1U << 2)
63 #define NFS_ATTR_FATTR_OWNER		(1U << 3)
64 #define NFS_ATTR_FATTR_GROUP		(1U << 4)
65 #define NFS_ATTR_FATTR_RDEV		(1U << 5)
66 #define NFS_ATTR_FATTR_SIZE		(1U << 6)
67 #define NFS_ATTR_FATTR_PRESIZE		(1U << 7)
68 #define NFS_ATTR_FATTR_BLOCKS_USED	(1U << 8)
69 #define NFS_ATTR_FATTR_SPACE_USED	(1U << 9)
70 #define NFS_ATTR_FATTR_FSID		(1U << 10)
71 #define NFS_ATTR_FATTR_FILEID		(1U << 11)
72 #define NFS_ATTR_FATTR_ATIME		(1U << 12)
73 #define NFS_ATTR_FATTR_MTIME		(1U << 13)
74 #define NFS_ATTR_FATTR_CTIME		(1U << 14)
75 #define NFS_ATTR_FATTR_PREMTIME		(1U << 15)
76 #define NFS_ATTR_FATTR_PRECTIME		(1U << 16)
77 #define NFS_ATTR_FATTR_CHANGE		(1U << 17)
78 #define NFS_ATTR_FATTR_PRECHANGE	(1U << 18)
79 #define NFS_ATTR_FATTR_V4_REFERRAL	(1U << 19)	/* NFSv4 referral */
80 
81 #define NFS_ATTR_FATTR (NFS_ATTR_FATTR_TYPE \
82 		| NFS_ATTR_FATTR_MODE \
83 		| NFS_ATTR_FATTR_NLINK \
84 		| NFS_ATTR_FATTR_OWNER \
85 		| NFS_ATTR_FATTR_GROUP \
86 		| NFS_ATTR_FATTR_RDEV \
87 		| NFS_ATTR_FATTR_SIZE \
88 		| NFS_ATTR_FATTR_FSID \
89 		| NFS_ATTR_FATTR_FILEID \
90 		| NFS_ATTR_FATTR_ATIME \
91 		| NFS_ATTR_FATTR_MTIME \
92 		| NFS_ATTR_FATTR_CTIME)
93 #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \
94 		| NFS_ATTR_FATTR_BLOCKS_USED)
95 #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \
96 		| NFS_ATTR_FATTR_SPACE_USED)
97 #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \
98 		| NFS_ATTR_FATTR_SPACE_USED \
99 		| NFS_ATTR_FATTR_CHANGE)
100 
101 /*
102  * Info on the file system
103  */
104 struct nfs_fsinfo {
105 	struct nfs_fattr	*fattr; /* Post-op attributes */
106 	__u32			rtmax;	/* max.  read transfer size */
107 	__u32			rtpref;	/* pref. read transfer size */
108 	__u32			rtmult;	/* reads should be multiple of this */
109 	__u32			wtmax;	/* max.  write transfer size */
110 	__u32			wtpref;	/* pref. write transfer size */
111 	__u32			wtmult;	/* writes should be multiple of this */
112 	__u32			dtpref;	/* pref. readdir transfer size */
113 	__u64			maxfilesize;
114 	__u32			lease_time; /* in seconds */
115 };
116 
117 struct nfs_fsstat {
118 	struct nfs_fattr	*fattr; /* Post-op attributes */
119 	__u64			tbytes;	/* total size in bytes */
120 	__u64			fbytes;	/* # of free bytes */
121 	__u64			abytes;	/* # of bytes available to user */
122 	__u64			tfiles;	/* # of files */
123 	__u64			ffiles;	/* # of free files */
124 	__u64			afiles;	/* # of files available to user */
125 };
126 
127 struct nfs2_fsstat {
128 	__u32			tsize;  /* Server transfer size */
129 	__u32			bsize;  /* Filesystem block size */
130 	__u32			blocks; /* No. of "bsize" blocks on filesystem */
131 	__u32			bfree;  /* No. of free "bsize" blocks */
132 	__u32			bavail; /* No. of available "bsize" blocks */
133 };
134 
135 struct nfs_pathconf {
136 	struct nfs_fattr	*fattr; /* Post-op attributes */
137 	__u32			max_link; /* max # of hard links */
138 	__u32			max_namelen; /* max name length */
139 };
140 
141 struct nfs4_change_info {
142 	u32			atomic;
143 	u64			before;
144 	u64			after;
145 };
146 
147 struct nfs_seqid;
148 
149 /* nfs41 sessions channel attributes */
150 struct nfs4_channel_attrs {
151 	u32			headerpadsz;
152 	u32			max_rqst_sz;
153 	u32			max_resp_sz;
154 	u32			max_resp_sz_cached;
155 	u32			max_ops;
156 	u32			max_reqs;
157 };
158 
159 /* nfs41 sessions slot seqid */
160 struct nfs4_slot {
161 	u32		 	seq_nr;
162 };
163 
164 struct nfs4_sequence_args {
165 	struct nfs4_session	*sa_session;
166 	u8			sa_slotid;
167 	u8			sa_cache_this;
168 };
169 
170 struct nfs4_sequence_res {
171 	struct nfs4_session	*sr_session;
172 	u8			sr_slotid;	/* slot used to send request */
173 	unsigned long		sr_renewal_time;
174 	int			sr_status;	/* sequence operation status */
175 };
176 
177 struct nfs4_get_lease_time_args {
178 	struct nfs4_sequence_args	la_seq_args;
179 };
180 
181 struct nfs4_get_lease_time_res {
182 	struct nfs_fsinfo	       *lr_fsinfo;
183 	struct nfs4_sequence_res	lr_seq_res;
184 };
185 
186 /*
187  * Arguments to the open call.
188  */
189 struct nfs_openargs {
190 	const struct nfs_fh *	fh;
191 	struct nfs_seqid *	seqid;
192 	int			open_flags;
193 	fmode_t			fmode;
194 	__u64                   clientid;
195 	__u64                   id;
196 	union {
197 		struct iattr *  attrs;    /* UNCHECKED, GUARDED */
198 		nfs4_verifier   verifier; /* EXCLUSIVE */
199 		nfs4_stateid	delegation;		/* CLAIM_DELEGATE_CUR */
200 		fmode_t		delegation_type;	/* CLAIM_PREVIOUS */
201 	} u;
202 	const struct qstr *	name;
203 	const struct nfs_server *server;	 /* Needed for ID mapping */
204 	const u32 *		bitmask;
205 	__u32			claim;
206 	struct nfs4_sequence_args	seq_args;
207 };
208 
209 struct nfs_openres {
210 	nfs4_stateid            stateid;
211 	struct nfs_fh           fh;
212 	struct nfs4_change_info	cinfo;
213 	__u32                   rflags;
214 	struct nfs_fattr *      f_attr;
215 	struct nfs_fattr *      dir_attr;
216 	struct nfs_seqid *	seqid;
217 	const struct nfs_server *server;
218 	fmode_t			delegation_type;
219 	nfs4_stateid		delegation;
220 	__u32			do_recall;
221 	__u64			maxsize;
222 	__u32			attrset[NFS4_BITMAP_SIZE];
223 	struct nfs4_sequence_res	seq_res;
224 };
225 
226 /*
227  * Arguments to the open_confirm call.
228  */
229 struct nfs_open_confirmargs {
230 	const struct nfs_fh *	fh;
231 	nfs4_stateid *		stateid;
232 	struct nfs_seqid *	seqid;
233 };
234 
235 struct nfs_open_confirmres {
236 	nfs4_stateid            stateid;
237 	struct nfs_seqid *	seqid;
238 };
239 
240 /*
241  * Arguments to the close call.
242  */
243 struct nfs_closeargs {
244 	struct nfs_fh *         fh;
245 	nfs4_stateid *		stateid;
246 	struct nfs_seqid *	seqid;
247 	fmode_t			fmode;
248 	const u32 *		bitmask;
249 	struct nfs4_sequence_args	seq_args;
250 };
251 
252 struct nfs_closeres {
253 	nfs4_stateid            stateid;
254 	struct nfs_fattr *	fattr;
255 	struct nfs_seqid *	seqid;
256 	const struct nfs_server *server;
257 	struct nfs4_sequence_res	seq_res;
258 };
259 /*
260  *  * Arguments to the lock,lockt, and locku call.
261  *   */
262 struct nfs_lowner {
263 	__u64			clientid;
264 	__u64			id;
265 };
266 
267 struct nfs_lock_args {
268 	struct nfs_fh *		fh;
269 	struct file_lock *	fl;
270 	struct nfs_seqid *	lock_seqid;
271 	nfs4_stateid *		lock_stateid;
272 	struct nfs_seqid *	open_seqid;
273 	nfs4_stateid *		open_stateid;
274 	struct nfs_lowner	lock_owner;
275 	unsigned char		block : 1;
276 	unsigned char		reclaim : 1;
277 	unsigned char		new_lock_owner : 1;
278 	struct nfs4_sequence_args	seq_args;
279 };
280 
281 struct nfs_lock_res {
282 	nfs4_stateid		stateid;
283 	struct nfs_seqid *	lock_seqid;
284 	struct nfs_seqid *	open_seqid;
285 	struct nfs4_sequence_res	seq_res;
286 };
287 
288 struct nfs_locku_args {
289 	struct nfs_fh *		fh;
290 	struct file_lock *	fl;
291 	struct nfs_seqid *	seqid;
292 	nfs4_stateid *		stateid;
293 	struct nfs4_sequence_args	seq_args;
294 };
295 
296 struct nfs_locku_res {
297 	nfs4_stateid		stateid;
298 	struct nfs_seqid *	seqid;
299 	struct nfs4_sequence_res	seq_res;
300 };
301 
302 struct nfs_lockt_args {
303 	struct nfs_fh *		fh;
304 	struct file_lock *	fl;
305 	struct nfs_lowner	lock_owner;
306 	struct nfs4_sequence_args	seq_args;
307 };
308 
309 struct nfs_lockt_res {
310 	struct file_lock *	denied; /* LOCK, LOCKT failed */
311 	struct nfs4_sequence_res	seq_res;
312 };
313 
314 struct nfs4_delegreturnargs {
315 	const struct nfs_fh *fhandle;
316 	const nfs4_stateid *stateid;
317 	const u32 * bitmask;
318 	struct nfs4_sequence_args	seq_args;
319 };
320 
321 struct nfs4_delegreturnres {
322 	struct nfs_fattr * fattr;
323 	const struct nfs_server *server;
324 	struct nfs4_sequence_res	seq_res;
325 };
326 
327 /*
328  * Arguments to the read call.
329  */
330 struct nfs_readargs {
331 	struct nfs_fh *		fh;
332 	struct nfs_open_context *context;
333 	__u64			offset;
334 	__u32			count;
335 	unsigned int		pgbase;
336 	struct page **		pages;
337 	struct nfs4_sequence_args	seq_args;
338 };
339 
340 struct nfs_readres {
341 	struct nfs_fattr *	fattr;
342 	__u32			count;
343 	int                     eof;
344 	struct nfs4_sequence_res	seq_res;
345 };
346 
347 /*
348  * Arguments to the write call.
349  */
350 struct nfs_writeargs {
351 	struct nfs_fh *		fh;
352 	struct nfs_open_context *context;
353 	__u64			offset;
354 	__u32			count;
355 	enum nfs3_stable_how	stable;
356 	unsigned int		pgbase;
357 	struct page **		pages;
358 	const u32 *		bitmask;
359 	struct nfs4_sequence_args	seq_args;
360 };
361 
362 struct nfs_writeverf {
363 	enum nfs3_stable_how	committed;
364 	__be32			verifier[2];
365 };
366 
367 struct nfs_writeres {
368 	struct nfs_fattr *	fattr;
369 	struct nfs_writeverf *	verf;
370 	__u32			count;
371 	const struct nfs_server *server;
372 	struct nfs4_sequence_res	seq_res;
373 };
374 
375 /*
376  * Common arguments to the unlink call
377  */
378 struct nfs_removeargs {
379 	const struct nfs_fh	*fh;
380 	struct qstr		name;
381 	const u32 *		bitmask;
382 	struct nfs4_sequence_args	seq_args;
383 };
384 
385 struct nfs_removeres {
386 	const struct nfs_server *server;
387 	struct nfs4_change_info	cinfo;
388 	struct nfs_fattr	dir_attr;
389 	struct nfs4_sequence_res 	seq_res;
390 };
391 
392 /*
393  * Argument struct for decode_entry function
394  */
395 struct nfs_entry {
396 	__u64			ino;
397 	__u64			cookie,
398 				prev_cookie;
399 	const char *		name;
400 	unsigned int		len;
401 	int			eof;
402 	struct nfs_fh *		fh;
403 	struct nfs_fattr *	fattr;
404 };
405 
406 /*
407  * The following types are for NFSv2 only.
408  */
409 struct nfs_sattrargs {
410 	struct nfs_fh *		fh;
411 	struct iattr *		sattr;
412 };
413 
414 struct nfs_diropargs {
415 	struct nfs_fh *		fh;
416 	const char *		name;
417 	unsigned int		len;
418 };
419 
420 struct nfs_createargs {
421 	struct nfs_fh *		fh;
422 	const char *		name;
423 	unsigned int		len;
424 	struct iattr *		sattr;
425 };
426 
427 struct nfs_renameargs {
428 	struct nfs_fh *		fromfh;
429 	const char *		fromname;
430 	unsigned int		fromlen;
431 	struct nfs_fh *		tofh;
432 	const char *		toname;
433 	unsigned int		tolen;
434 };
435 
436 struct nfs_setattrargs {
437 	struct nfs_fh *                 fh;
438 	nfs4_stateid                    stateid;
439 	struct iattr *                  iap;
440 	const struct nfs_server *	server; /* Needed for name mapping */
441 	const u32 *			bitmask;
442 	struct nfs4_sequence_args 	seq_args;
443 };
444 
445 struct nfs_setaclargs {
446 	struct nfs_fh *			fh;
447 	size_t				acl_len;
448 	unsigned int			acl_pgbase;
449 	struct page **			acl_pages;
450 	struct nfs4_sequence_args	seq_args;
451 };
452 
453 struct nfs_setaclres {
454 	struct nfs4_sequence_res	seq_res;
455 };
456 
457 struct nfs_getaclargs {
458 	struct nfs_fh *			fh;
459 	size_t				acl_len;
460 	unsigned int			acl_pgbase;
461 	struct page **			acl_pages;
462 	struct nfs4_sequence_args 	seq_args;
463 };
464 
465 struct nfs_getaclres {
466 	size_t				acl_len;
467 	struct nfs4_sequence_res	seq_res;
468 };
469 
470 struct nfs_setattrres {
471 	struct nfs_fattr *              fattr;
472 	const struct nfs_server *	server;
473 	struct nfs4_sequence_res	seq_res;
474 };
475 
476 struct nfs_linkargs {
477 	struct nfs_fh *		fromfh;
478 	struct nfs_fh *		tofh;
479 	const char *		toname;
480 	unsigned int		tolen;
481 };
482 
483 struct nfs_symlinkargs {
484 	struct nfs_fh *		fromfh;
485 	const char *		fromname;
486 	unsigned int		fromlen;
487 	struct page **		pages;
488 	unsigned int		pathlen;
489 	struct iattr *		sattr;
490 };
491 
492 struct nfs_readdirargs {
493 	struct nfs_fh *		fh;
494 	__u32			cookie;
495 	unsigned int		count;
496 	struct page **		pages;
497 };
498 
499 struct nfs3_getaclargs {
500 	struct nfs_fh *		fh;
501 	int			mask;
502 	struct page **		pages;
503 };
504 
505 struct nfs3_setaclargs {
506 	struct inode *		inode;
507 	int			mask;
508 	struct posix_acl *	acl_access;
509 	struct posix_acl *	acl_default;
510 	size_t			len;
511 	unsigned int		npages;
512 	struct page **		pages;
513 };
514 
515 struct nfs_diropok {
516 	struct nfs_fh *		fh;
517 	struct nfs_fattr *	fattr;
518 };
519 
520 struct nfs_readlinkargs {
521 	struct nfs_fh *		fh;
522 	unsigned int		pgbase;
523 	unsigned int		pglen;
524 	struct page **		pages;
525 };
526 
527 struct nfs3_sattrargs {
528 	struct nfs_fh *		fh;
529 	struct iattr *		sattr;
530 	unsigned int		guard;
531 	struct timespec		guardtime;
532 };
533 
534 struct nfs3_diropargs {
535 	struct nfs_fh *		fh;
536 	const char *		name;
537 	unsigned int		len;
538 };
539 
540 struct nfs3_accessargs {
541 	struct nfs_fh *		fh;
542 	__u32			access;
543 };
544 
545 struct nfs3_createargs {
546 	struct nfs_fh *		fh;
547 	const char *		name;
548 	unsigned int		len;
549 	struct iattr *		sattr;
550 	enum nfs3_createmode	createmode;
551 	__be32			verifier[2];
552 };
553 
554 struct nfs3_mkdirargs {
555 	struct nfs_fh *		fh;
556 	const char *		name;
557 	unsigned int		len;
558 	struct iattr *		sattr;
559 };
560 
561 struct nfs3_symlinkargs {
562 	struct nfs_fh *		fromfh;
563 	const char *		fromname;
564 	unsigned int		fromlen;
565 	struct page **		pages;
566 	unsigned int		pathlen;
567 	struct iattr *		sattr;
568 };
569 
570 struct nfs3_mknodargs {
571 	struct nfs_fh *		fh;
572 	const char *		name;
573 	unsigned int		len;
574 	enum nfs3_ftype		type;
575 	struct iattr *		sattr;
576 	dev_t			rdev;
577 };
578 
579 struct nfs3_renameargs {
580 	struct nfs_fh *		fromfh;
581 	const char *		fromname;
582 	unsigned int		fromlen;
583 	struct nfs_fh *		tofh;
584 	const char *		toname;
585 	unsigned int		tolen;
586 };
587 
588 struct nfs3_linkargs {
589 	struct nfs_fh *		fromfh;
590 	struct nfs_fh *		tofh;
591 	const char *		toname;
592 	unsigned int		tolen;
593 };
594 
595 struct nfs3_readdirargs {
596 	struct nfs_fh *		fh;
597 	__u64			cookie;
598 	__be32			verf[2];
599 	int			plus;
600 	unsigned int            count;
601 	struct page **		pages;
602 };
603 
604 struct nfs3_diropres {
605 	struct nfs_fattr *	dir_attr;
606 	struct nfs_fh *		fh;
607 	struct nfs_fattr *	fattr;
608 };
609 
610 struct nfs3_accessres {
611 	struct nfs_fattr *	fattr;
612 	__u32			access;
613 };
614 
615 struct nfs3_readlinkargs {
616 	struct nfs_fh *		fh;
617 	unsigned int		pgbase;
618 	unsigned int		pglen;
619 	struct page **		pages;
620 };
621 
622 struct nfs3_renameres {
623 	struct nfs_fattr *	fromattr;
624 	struct nfs_fattr *	toattr;
625 };
626 
627 struct nfs3_linkres {
628 	struct nfs_fattr *	dir_attr;
629 	struct nfs_fattr *	fattr;
630 };
631 
632 struct nfs3_readdirres {
633 	struct nfs_fattr *	dir_attr;
634 	__be32 *		verf;
635 	int			plus;
636 };
637 
638 struct nfs3_getaclres {
639 	struct nfs_fattr *	fattr;
640 	int			mask;
641 	unsigned int		acl_access_count;
642 	unsigned int		acl_default_count;
643 	struct posix_acl *	acl_access;
644 	struct posix_acl *	acl_default;
645 };
646 
647 #ifdef CONFIG_NFS_V4
648 
649 typedef u64 clientid4;
650 
651 struct nfs4_accessargs {
652 	const struct nfs_fh *		fh;
653 	const u32 *			bitmask;
654 	u32				access;
655 	struct nfs4_sequence_args	seq_args;
656 };
657 
658 struct nfs4_accessres {
659 	const struct nfs_server *	server;
660 	struct nfs_fattr *		fattr;
661 	u32				supported;
662 	u32				access;
663 	struct nfs4_sequence_res	seq_res;
664 };
665 
666 struct nfs4_create_arg {
667 	u32				ftype;
668 	union {
669 		struct {
670 			struct page **	pages;
671 			unsigned int	len;
672 		} symlink;   /* NF4LNK */
673 		struct {
674 			u32		specdata1;
675 			u32		specdata2;
676 		} device;    /* NF4BLK, NF4CHR */
677 	} u;
678 	const struct qstr *		name;
679 	const struct nfs_server *	server;
680 	const struct iattr *		attrs;
681 	const struct nfs_fh *		dir_fh;
682 	const u32 *			bitmask;
683 	struct nfs4_sequence_args 	seq_args;
684 };
685 
686 struct nfs4_create_res {
687 	const struct nfs_server *	server;
688 	struct nfs_fh *			fh;
689 	struct nfs_fattr *		fattr;
690 	struct nfs4_change_info		dir_cinfo;
691 	struct nfs_fattr *		dir_fattr;
692 	struct nfs4_sequence_res	seq_res;
693 };
694 
695 struct nfs4_fsinfo_arg {
696 	const struct nfs_fh *		fh;
697 	const u32 *			bitmask;
698 	struct nfs4_sequence_args	seq_args;
699 };
700 
701 struct nfs4_fsinfo_res {
702 	struct nfs_fsinfo	       *fsinfo;
703 	struct nfs4_sequence_res	seq_res;
704 };
705 
706 struct nfs4_getattr_arg {
707 	const struct nfs_fh *		fh;
708 	const u32 *			bitmask;
709 	struct nfs4_sequence_args	seq_args;
710 };
711 
712 struct nfs4_getattr_res {
713 	const struct nfs_server *	server;
714 	struct nfs_fattr *		fattr;
715 	struct nfs4_sequence_res	seq_res;
716 };
717 
718 struct nfs4_link_arg {
719 	const struct nfs_fh *		fh;
720 	const struct nfs_fh *		dir_fh;
721 	const struct qstr *		name;
722 	const u32 *			bitmask;
723 	struct nfs4_sequence_args 	seq_args;
724 };
725 
726 struct nfs4_link_res {
727 	const struct nfs_server *	server;
728 	struct nfs_fattr *		fattr;
729 	struct nfs4_change_info		cinfo;
730 	struct nfs_fattr *		dir_attr;
731 	struct nfs4_sequence_res	seq_res;
732 };
733 
734 
735 struct nfs4_lookup_arg {
736 	const struct nfs_fh *		dir_fh;
737 	const struct qstr *		name;
738 	const u32 *			bitmask;
739 	struct nfs4_sequence_args	seq_args;
740 };
741 
742 struct nfs4_lookup_res {
743 	const struct nfs_server *	server;
744 	struct nfs_fattr *		fattr;
745 	struct nfs_fh *			fh;
746 	struct nfs4_sequence_res	seq_res;
747 };
748 
749 struct nfs4_lookup_root_arg {
750 	const u32 *			bitmask;
751 	struct nfs4_sequence_args	seq_args;
752 };
753 
754 struct nfs4_pathconf_arg {
755 	const struct nfs_fh *		fh;
756 	const u32 *			bitmask;
757 	struct nfs4_sequence_args	seq_args;
758 };
759 
760 struct nfs4_pathconf_res {
761 	struct nfs_pathconf	       *pathconf;
762 	struct nfs4_sequence_res	seq_res;
763 };
764 
765 struct nfs4_readdir_arg {
766 	const struct nfs_fh *		fh;
767 	u64				cookie;
768 	nfs4_verifier			verifier;
769 	u32				count;
770 	struct page **			pages;	/* zero-copy data */
771 	unsigned int			pgbase;	/* zero-copy data */
772 	const u32 *			bitmask;
773 	struct nfs4_sequence_args	seq_args;
774 };
775 
776 struct nfs4_readdir_res {
777 	nfs4_verifier			verifier;
778 	unsigned int			pgbase;
779 	struct nfs4_sequence_res	seq_res;
780 };
781 
782 struct nfs4_readlink {
783 	const struct nfs_fh *		fh;
784 	unsigned int			pgbase;
785 	unsigned int			pglen;   /* zero-copy data */
786 	struct page **			pages;   /* zero-copy data */
787 	struct nfs4_sequence_args	seq_args;
788 };
789 
790 struct nfs4_readlink_res {
791 	struct nfs4_sequence_res	seq_res;
792 };
793 
794 struct nfs4_rename_arg {
795 	const struct nfs_fh *		old_dir;
796 	const struct nfs_fh *		new_dir;
797 	const struct qstr *		old_name;
798 	const struct qstr *		new_name;
799 	const u32 *			bitmask;
800 	struct nfs4_sequence_args	seq_args;
801 };
802 
803 struct nfs4_rename_res {
804 	const struct nfs_server *	server;
805 	struct nfs4_change_info		old_cinfo;
806 	struct nfs_fattr *		old_fattr;
807 	struct nfs4_change_info		new_cinfo;
808 	struct nfs_fattr *		new_fattr;
809 	struct nfs4_sequence_res	seq_res;
810 };
811 
812 #define NFS4_SETCLIENTID_NAMELEN	(127)
813 struct nfs4_setclientid {
814 	const nfs4_verifier *		sc_verifier;
815 	unsigned int			sc_name_len;
816 	char				sc_name[NFS4_SETCLIENTID_NAMELEN + 1];
817 	u32				sc_prog;
818 	unsigned int			sc_netid_len;
819 	char				sc_netid[RPCBIND_MAXNETIDLEN + 1];
820 	unsigned int			sc_uaddr_len;
821 	char				sc_uaddr[RPCBIND_MAXUADDRLEN + 1];
822 	u32				sc_cb_ident;
823 };
824 
825 struct nfs4_statfs_arg {
826 	const struct nfs_fh *		fh;
827 	const u32 *			bitmask;
828 	struct nfs4_sequence_args	seq_args;
829 };
830 
831 struct nfs4_statfs_res {
832 	struct nfs_fsstat	       *fsstat;
833 	struct nfs4_sequence_res	seq_res;
834 };
835 
836 struct nfs4_server_caps_arg {
837 	struct nfs_fh		       *fhandle;
838 	struct nfs4_sequence_args	seq_args;
839 };
840 
841 struct nfs4_server_caps_res {
842 	u32				attr_bitmask[2];
843 	u32				acl_bitmask;
844 	u32				has_links;
845 	u32				has_symlinks;
846 	struct nfs4_sequence_res	seq_res;
847 };
848 
849 struct nfs4_string {
850 	unsigned int len;
851 	char *data;
852 };
853 
854 #define NFS4_PATHNAME_MAXCOMPONENTS 512
855 struct nfs4_pathname {
856 	unsigned int ncomponents;
857 	struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];
858 };
859 
860 #define NFS4_FS_LOCATION_MAXSERVERS 10
861 struct nfs4_fs_location {
862 	unsigned int nservers;
863 	struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];
864 	struct nfs4_pathname rootpath;
865 };
866 
867 #define NFS4_FS_LOCATIONS_MAXENTRIES 10
868 struct nfs4_fs_locations {
869 	struct nfs_fattr fattr;
870 	const struct nfs_server *server;
871 	struct nfs4_pathname fs_path;
872 	int nlocations;
873 	struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];
874 };
875 
876 struct nfs4_fs_locations_arg {
877 	const struct nfs_fh *dir_fh;
878 	const struct qstr *name;
879 	struct page *page;
880 	const u32 *bitmask;
881 	struct nfs4_sequence_args	seq_args;
882 };
883 
884 struct nfs4_fs_locations_res {
885 	struct nfs4_fs_locations       *fs_locations;
886 	struct nfs4_sequence_res	seq_res;
887 };
888 
889 #endif /* CONFIG_NFS_V4 */
890 
891 struct nfstime4 {
892 	u64	seconds;
893 	u32	nseconds;
894 };
895 
896 #ifdef CONFIG_NFS_V4_1
897 struct nfs_impl_id4 {
898 	u32		domain_len;
899 	char		*domain;
900 	u32		name_len;
901 	char		*name;
902 	struct nfstime4	date;
903 };
904 
905 #define NFS4_EXCHANGE_ID_LEN	(48)
906 struct nfs41_exchange_id_args {
907 	struct nfs_client		*client;
908 	nfs4_verifier			*verifier;
909 	unsigned int 			id_len;
910 	char 				id[NFS4_EXCHANGE_ID_LEN];
911 	u32				flags;
912 };
913 
914 struct server_owner {
915 	uint64_t			minor_id;
916 	uint32_t			major_id_sz;
917 	char				major_id[NFS4_OPAQUE_LIMIT];
918 };
919 
920 struct server_scope {
921 	uint32_t			server_scope_sz;
922 	char 				server_scope[NFS4_OPAQUE_LIMIT];
923 };
924 
925 struct nfs41_exchange_id_res {
926 	struct nfs_client		*client;
927 	u32				flags;
928 };
929 
930 struct nfs41_create_session_args {
931 	struct nfs_client	       *client;
932 	uint32_t			flags;
933 	uint32_t			cb_program;
934 	struct nfs4_channel_attrs	fc_attrs;	/* Fore Channel */
935 	struct nfs4_channel_attrs	bc_attrs;	/* Back Channel */
936 };
937 
938 struct nfs41_create_session_res {
939 	struct nfs_client	       *client;
940 };
941 #endif /* CONFIG_NFS_V4_1 */
942 
943 struct nfs_page;
944 
945 #define NFS_PAGEVEC_SIZE	(8U)
946 
947 struct nfs_read_data {
948 	int			flags;
949 	struct rpc_task		task;
950 	struct inode		*inode;
951 	struct rpc_cred		*cred;
952 	struct nfs_fattr	fattr;	/* fattr storage */
953 	struct list_head	pages;	/* Coalesced read requests */
954 	struct nfs_page		*req;	/* multi ops per nfs_page */
955 	struct page		**pagevec;
956 	unsigned int		npages;	/* Max length of pagevec */
957 	struct nfs_readargs args;
958 	struct nfs_readres  res;
959 #ifdef CONFIG_NFS_V4
960 	unsigned long		timestamp;	/* For lease renewal */
961 #endif
962 	struct page		*page_array[NFS_PAGEVEC_SIZE];
963 };
964 
965 struct nfs_write_data {
966 	int			flags;
967 	struct rpc_task		task;
968 	struct inode		*inode;
969 	struct rpc_cred		*cred;
970 	struct nfs_fattr	fattr;
971 	struct nfs_writeverf	verf;
972 	struct list_head	pages;		/* Coalesced requests we wish to flush */
973 	struct nfs_page		*req;		/* multi ops per nfs_page */
974 	struct page		**pagevec;
975 	unsigned int		npages;		/* Max length of pagevec */
976 	struct nfs_writeargs	args;		/* argument struct */
977 	struct nfs_writeres	res;		/* result struct */
978 #ifdef CONFIG_NFS_V4
979 	unsigned long		timestamp;	/* For lease renewal */
980 #endif
981 	struct page		*page_array[NFS_PAGEVEC_SIZE];
982 };
983 
984 struct nfs_access_entry;
985 
986 /*
987  * RPC procedure vector for NFSv2/NFSv3 demuxing
988  */
989 struct nfs_rpc_ops {
990 	u32	version;		/* Protocol version */
991 	const struct dentry_operations *dentry_ops;
992 	const struct inode_operations *dir_inode_ops;
993 	const struct inode_operations *file_inode_ops;
994 
995 	int	(*getroot) (struct nfs_server *, struct nfs_fh *,
996 			    struct nfs_fsinfo *);
997 	int	(*lookupfh)(struct nfs_server *, struct nfs_fh *,
998 			    struct qstr *, struct nfs_fh *,
999 			    struct nfs_fattr *);
1000 	int	(*getattr) (struct nfs_server *, struct nfs_fh *,
1001 			    struct nfs_fattr *);
1002 	int	(*setattr) (struct dentry *, struct nfs_fattr *,
1003 			    struct iattr *);
1004 	int	(*lookup)  (struct inode *, struct qstr *,
1005 			    struct nfs_fh *, struct nfs_fattr *);
1006 	int	(*access)  (struct inode *, struct nfs_access_entry *);
1007 	int	(*readlink)(struct inode *, struct page *, unsigned int,
1008 			    unsigned int);
1009 	int	(*create)  (struct inode *, struct dentry *,
1010 			    struct iattr *, int, struct nameidata *);
1011 	int	(*remove)  (struct inode *, struct qstr *);
1012 	void	(*unlink_setup)  (struct rpc_message *, struct inode *dir);
1013 	int	(*unlink_done) (struct rpc_task *, struct inode *);
1014 	int	(*rename)  (struct inode *, struct qstr *,
1015 			    struct inode *, struct qstr *);
1016 	int	(*link)    (struct inode *, struct inode *, struct qstr *);
1017 	int	(*symlink) (struct inode *, struct dentry *, struct page *,
1018 			    unsigned int, struct iattr *);
1019 	int	(*mkdir)   (struct inode *, struct dentry *, struct iattr *);
1020 	int	(*rmdir)   (struct inode *, struct qstr *);
1021 	int	(*readdir) (struct dentry *, struct rpc_cred *,
1022 			    u64, struct page *, unsigned int, int);
1023 	int	(*mknod)   (struct inode *, struct dentry *, struct iattr *,
1024 			    dev_t);
1025 	int	(*statfs)  (struct nfs_server *, struct nfs_fh *,
1026 			    struct nfs_fsstat *);
1027 	int	(*fsinfo)  (struct nfs_server *, struct nfs_fh *,
1028 			    struct nfs_fsinfo *);
1029 	int	(*pathconf) (struct nfs_server *, struct nfs_fh *,
1030 			     struct nfs_pathconf *);
1031 	int	(*set_capabilities)(struct nfs_server *, struct nfs_fh *);
1032 	__be32 *(*decode_dirent)(__be32 *, struct nfs_entry *, int plus);
1033 	void	(*read_setup)   (struct nfs_read_data *, struct rpc_message *);
1034 	int	(*read_done)  (struct rpc_task *, struct nfs_read_data *);
1035 	void	(*write_setup)  (struct nfs_write_data *, struct rpc_message *);
1036 	int	(*write_done)  (struct rpc_task *, struct nfs_write_data *);
1037 	void	(*commit_setup) (struct nfs_write_data *, struct rpc_message *);
1038 	int	(*commit_done) (struct rpc_task *, struct nfs_write_data *);
1039 	int	(*lock)(struct file *, int, struct file_lock *);
1040 	int	(*lock_check_bounds)(const struct file_lock *);
1041 	void	(*clear_acl_cache)(struct inode *);
1042 	void	(*close_context)(struct nfs_open_context *ctx, int);
1043 };
1044 
1045 /*
1046  * 	NFS_CALL(getattr, inode, (fattr));
1047  * into
1048  *	NFS_PROTO(inode)->getattr(fattr);
1049  */
1050 #define NFS_CALL(op, inode, args)	NFS_PROTO(inode)->op args
1051 
1052 /*
1053  * Function vectors etc. for the NFS client
1054  */
1055 extern const struct nfs_rpc_ops	nfs_v2_clientops;
1056 extern const struct nfs_rpc_ops	nfs_v3_clientops;
1057 extern const struct nfs_rpc_ops	nfs_v4_clientops;
1058 extern struct rpc_version	nfs_version2;
1059 extern struct rpc_version	nfs_version3;
1060 extern struct rpc_version	nfs_version4;
1061 
1062 extern struct rpc_version	nfsacl_version3;
1063 extern struct rpc_program	nfsacl_program;
1064 
1065 #endif
1066