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