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