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