nfs_xdr.h revision 0dbb4c6799cf8fa8c5ba1926153a30960117477d
1#ifndef _LINUX_NFS_XDR_H
2#define _LINUX_NFS_XDR_H
3
4#include <linux/nfsacl.h>
5
6/*
7 * To change the maximum rsize and wsize supported by the NFS client, adjust
8 * NFS_MAX_FILE_IO_SIZE.  64KB is a typical maximum, but some servers can
9 * support a megabyte or more.  The default is left at 4096 bytes, which is
10 * reasonable for NFS over UDP.
11 */
12#define NFS_MAX_FILE_IO_SIZE	(1048576U)
13#define NFS_DEF_FILE_IO_SIZE	(4096U)
14#define NFS_MIN_FILE_IO_SIZE	(1024U)
15
16struct nfs_fsid {
17	uint64_t		major;
18	uint64_t		minor;
19};
20
21/*
22 * Helper for checking equality between 2 fsids.
23 */
24static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b)
25{
26	return a->major == b->major && a->minor == b->minor;
27}
28
29struct nfs_fattr {
30	unsigned short		valid;		/* which fields are valid */
31	__u64			pre_size;	/* pre_op_attr.size	  */
32	struct timespec		pre_mtime;	/* pre_op_attr.mtime	  */
33	struct timespec		pre_ctime;	/* pre_op_attr.ctime	  */
34	enum nfs_ftype		type;		/* always use NFSv2 types */
35	__u32			mode;
36	__u32			nlink;
37	__u32			uid;
38	__u32			gid;
39	__u64			size;
40	union {
41		struct {
42			__u32	blocksize;
43			__u32	blocks;
44		} nfs2;
45		struct {
46			__u64	used;
47		} nfs3;
48	} du;
49	dev_t			rdev;
50	struct nfs_fsid		fsid;
51	__u64			fileid;
52	struct timespec		atime;
53	struct timespec		mtime;
54	struct timespec		ctime;
55	__u32			bitmap[2];	/* NFSv4 returned attribute bitmap */
56	__u64			change_attr;	/* NFSv4 change attribute */
57	__u64			pre_change_attr;/* pre-op NFSv4 change attribute */
58	unsigned long		time_start;
59};
60
61#define NFS_ATTR_WCC		0x0001		/* pre-op WCC data    */
62#define NFS_ATTR_FATTR		0x0002		/* post-op attributes */
63#define NFS_ATTR_FATTR_V3	0x0004		/* NFSv3 attributes */
64#define NFS_ATTR_FATTR_V4	0x0008		/* NFSv4 change attribute */
65#define NFS_ATTR_FATTR_V4_REFERRAL	0x0010		/* NFSv4 referral */
66
67/*
68 * Info on the file system
69 */
70struct nfs_fsinfo {
71	struct nfs_fattr	*fattr; /* Post-op attributes */
72	__u32			rtmax;	/* max.  read transfer size */
73	__u32			rtpref;	/* pref. read transfer size */
74	__u32			rtmult;	/* reads should be multiple of this */
75	__u32			wtmax;	/* max.  write transfer size */
76	__u32			wtpref;	/* pref. write transfer size */
77	__u32			wtmult;	/* writes should be multiple of this */
78	__u32			dtpref;	/* pref. readdir transfer size */
79	__u64			maxfilesize;
80	__u32			lease_time; /* in seconds */
81};
82
83struct nfs_fsstat {
84	struct nfs_fattr	*fattr; /* Post-op attributes */
85	__u64			tbytes;	/* total size in bytes */
86	__u64			fbytes;	/* # of free bytes */
87	__u64			abytes;	/* # of bytes available to user */
88	__u64			tfiles;	/* # of files */
89	__u64			ffiles;	/* # of free files */
90	__u64			afiles;	/* # of files available to user */
91};
92
93struct nfs2_fsstat {
94	__u32			tsize;  /* Server transfer size */
95	__u32			bsize;  /* Filesystem block size */
96	__u32			blocks; /* No. of "bsize" blocks on filesystem */
97	__u32			bfree;  /* No. of free "bsize" blocks */
98	__u32			bavail; /* No. of available "bsize" blocks */
99};
100
101struct nfs_pathconf {
102	struct nfs_fattr	*fattr; /* Post-op attributes */
103	__u32			max_link; /* max # of hard links */
104	__u32			max_namelen; /* max name length */
105};
106
107struct nfs4_change_info {
108	u32			atomic;
109	u64			before;
110	u64			after;
111};
112
113struct nfs_seqid;
114/*
115 * Arguments to the open call.
116 */
117struct nfs_openargs {
118	const struct nfs_fh *	fh;
119	struct nfs_seqid *	seqid;
120	int			open_flags;
121	__u64                   clientid;
122	__u32                   id;
123	union {
124		struct iattr *  attrs;    /* UNCHECKED, GUARDED */
125		nfs4_verifier   verifier; /* EXCLUSIVE */
126		nfs4_stateid	delegation;		/* CLAIM_DELEGATE_CUR */
127		int		delegation_type;	/* CLAIM_PREVIOUS */
128	} u;
129	const struct qstr *	name;
130	const struct nfs_server *server;	 /* Needed for ID mapping */
131	const u32 *		bitmask;
132	__u32			claim;
133};
134
135struct nfs_openres {
136	nfs4_stateid            stateid;
137	struct nfs_fh           fh;
138	struct nfs4_change_info	cinfo;
139	__u32                   rflags;
140	struct nfs_fattr *      f_attr;
141	struct nfs_fattr *      dir_attr;
142	const struct nfs_server *server;
143	int			delegation_type;
144	nfs4_stateid		delegation;
145	__u32			do_recall;
146	__u64			maxsize;
147};
148
149/*
150 * Arguments to the open_confirm call.
151 */
152struct nfs_open_confirmargs {
153	const struct nfs_fh *	fh;
154	nfs4_stateid *		stateid;
155	struct nfs_seqid *	seqid;
156};
157
158struct nfs_open_confirmres {
159	nfs4_stateid            stateid;
160};
161
162/*
163 * Arguments to the close call.
164 */
165struct nfs_closeargs {
166	struct nfs_fh *         fh;
167	nfs4_stateid *		stateid;
168	struct nfs_seqid *	seqid;
169	int			open_flags;
170	const u32 *		bitmask;
171};
172
173struct nfs_closeres {
174	nfs4_stateid            stateid;
175	struct nfs_fattr *	fattr;
176	const struct nfs_server *server;
177};
178/*
179 *  * Arguments to the lock,lockt, and locku call.
180 *   */
181struct nfs_lowner {
182	__u64			clientid;
183	u32			id;
184};
185
186struct nfs_lock_args {
187	struct nfs_fh *		fh;
188	struct file_lock *	fl;
189	struct nfs_seqid *	lock_seqid;
190	nfs4_stateid *		lock_stateid;
191	struct nfs_seqid *	open_seqid;
192	nfs4_stateid *		open_stateid;
193	struct nfs_lowner	lock_owner;
194	unsigned char		block : 1;
195	unsigned char		reclaim : 1;
196	unsigned char		new_lock_owner : 1;
197};
198
199struct nfs_lock_res {
200	nfs4_stateid			stateid;
201};
202
203struct nfs_locku_args {
204	struct nfs_fh *		fh;
205	struct file_lock *	fl;
206	struct nfs_seqid *	seqid;
207	nfs4_stateid *		stateid;
208};
209
210struct nfs_locku_res {
211	nfs4_stateid			stateid;
212};
213
214struct nfs_lockt_args {
215	struct nfs_fh *		fh;
216	struct file_lock *	fl;
217	struct nfs_lowner	lock_owner;
218};
219
220struct nfs_lockt_res {
221	struct file_lock *	denied; /* LOCK, LOCKT failed */
222};
223
224struct nfs4_delegreturnargs {
225	const struct nfs_fh *fhandle;
226	const nfs4_stateid *stateid;
227	const u32 * bitmask;
228};
229
230struct nfs4_delegreturnres {
231	struct nfs_fattr * fattr;
232	const struct nfs_server *server;
233};
234
235/*
236 * Arguments to the read call.
237 */
238struct nfs_readargs {
239	struct nfs_fh *		fh;
240	struct nfs_open_context *context;
241	__u64			offset;
242	__u32			count;
243	unsigned int		pgbase;
244	struct page **		pages;
245};
246
247struct nfs_readres {
248	struct nfs_fattr *	fattr;
249	__u32			count;
250	int                     eof;
251};
252
253/*
254 * Arguments to the write call.
255 */
256struct nfs_writeargs {
257	struct nfs_fh *		fh;
258	struct nfs_open_context *context;
259	__u64			offset;
260	__u32			count;
261	enum nfs3_stable_how	stable;
262	unsigned int		pgbase;
263	struct page **		pages;
264	const u32 *		bitmask;
265};
266
267struct nfs_writeverf {
268	enum nfs3_stable_how	committed;
269	__u32			verifier[2];
270};
271
272struct nfs_writeres {
273	struct nfs_fattr *	fattr;
274	struct nfs_writeverf *	verf;
275	__u32			count;
276	const struct nfs_server *server;
277};
278
279/*
280 * Argument struct for decode_entry function
281 */
282struct nfs_entry {
283	__u64			ino;
284	__u64			cookie,
285				prev_cookie;
286	const char *		name;
287	unsigned int		len;
288	int			eof;
289	struct nfs_fh *		fh;
290	struct nfs_fattr *	fattr;
291};
292
293/*
294 * The following types are for NFSv2 only.
295 */
296struct nfs_sattrargs {
297	struct nfs_fh *		fh;
298	struct iattr *		sattr;
299};
300
301struct nfs_diropargs {
302	struct nfs_fh *		fh;
303	const char *		name;
304	unsigned int		len;
305};
306
307struct nfs_createargs {
308	struct nfs_fh *		fh;
309	const char *		name;
310	unsigned int		len;
311	struct iattr *		sattr;
312};
313
314struct nfs_renameargs {
315	struct nfs_fh *		fromfh;
316	const char *		fromname;
317	unsigned int		fromlen;
318	struct nfs_fh *		tofh;
319	const char *		toname;
320	unsigned int		tolen;
321};
322
323struct nfs_setattrargs {
324	struct nfs_fh *                 fh;
325	nfs4_stateid                    stateid;
326	struct iattr *                  iap;
327	const struct nfs_server *	server; /* Needed for name mapping */
328	const u32 *			bitmask;
329};
330
331struct nfs_setaclargs {
332	struct nfs_fh *			fh;
333	size_t				acl_len;
334	unsigned int			acl_pgbase;
335	struct page **			acl_pages;
336};
337
338struct nfs_getaclargs {
339	struct nfs_fh *			fh;
340	size_t				acl_len;
341	unsigned int			acl_pgbase;
342	struct page **			acl_pages;
343};
344
345struct nfs_setattrres {
346	struct nfs_fattr *              fattr;
347	const struct nfs_server *	server;
348};
349
350struct nfs_linkargs {
351	struct nfs_fh *		fromfh;
352	struct nfs_fh *		tofh;
353	const char *		toname;
354	unsigned int		tolen;
355};
356
357struct nfs_symlinkargs {
358	struct nfs_fh *		fromfh;
359	const char *		fromname;
360	unsigned int		fromlen;
361	struct page **		pages;
362	unsigned int		pathlen;
363	struct iattr *		sattr;
364};
365
366struct nfs_readdirargs {
367	struct nfs_fh *		fh;
368	__u32			cookie;
369	unsigned int		count;
370	struct page **		pages;
371};
372
373struct nfs3_getaclargs {
374	struct nfs_fh *		fh;
375	int			mask;
376	struct page **		pages;
377};
378
379struct nfs3_setaclargs {
380	struct inode *		inode;
381	int			mask;
382	struct posix_acl *	acl_access;
383	struct posix_acl *	acl_default;
384	struct page **		pages;
385};
386
387struct nfs_diropok {
388	struct nfs_fh *		fh;
389	struct nfs_fattr *	fattr;
390};
391
392struct nfs_readlinkargs {
393	struct nfs_fh *		fh;
394	unsigned int		pgbase;
395	unsigned int		pglen;
396	struct page **		pages;
397};
398
399struct nfs3_sattrargs {
400	struct nfs_fh *		fh;
401	struct iattr *		sattr;
402	unsigned int		guard;
403	struct timespec		guardtime;
404};
405
406struct nfs3_diropargs {
407	struct nfs_fh *		fh;
408	const char *		name;
409	unsigned int		len;
410};
411
412struct nfs3_accessargs {
413	struct nfs_fh *		fh;
414	__u32			access;
415};
416
417struct nfs3_createargs {
418	struct nfs_fh *		fh;
419	const char *		name;
420	unsigned int		len;
421	struct iattr *		sattr;
422	enum nfs3_createmode	createmode;
423	__u32			verifier[2];
424};
425
426struct nfs3_mkdirargs {
427	struct nfs_fh *		fh;
428	const char *		name;
429	unsigned int		len;
430	struct iattr *		sattr;
431};
432
433struct nfs3_symlinkargs {
434	struct nfs_fh *		fromfh;
435	const char *		fromname;
436	unsigned int		fromlen;
437	struct page **		pages;
438	unsigned int		pathlen;
439	struct iattr *		sattr;
440};
441
442struct nfs3_mknodargs {
443	struct nfs_fh *		fh;
444	const char *		name;
445	unsigned int		len;
446	enum nfs3_ftype		type;
447	struct iattr *		sattr;
448	dev_t			rdev;
449};
450
451struct nfs3_renameargs {
452	struct nfs_fh *		fromfh;
453	const char *		fromname;
454	unsigned int		fromlen;
455	struct nfs_fh *		tofh;
456	const char *		toname;
457	unsigned int		tolen;
458};
459
460struct nfs3_linkargs {
461	struct nfs_fh *		fromfh;
462	struct nfs_fh *		tofh;
463	const char *		toname;
464	unsigned int		tolen;
465};
466
467struct nfs3_readdirargs {
468	struct nfs_fh *		fh;
469	__u64			cookie;
470	__u32			verf[2];
471	int			plus;
472	unsigned int            count;
473	struct page **		pages;
474};
475
476struct nfs3_diropres {
477	struct nfs_fattr *	dir_attr;
478	struct nfs_fh *		fh;
479	struct nfs_fattr *	fattr;
480};
481
482struct nfs3_accessres {
483	struct nfs_fattr *	fattr;
484	__u32			access;
485};
486
487struct nfs3_readlinkargs {
488	struct nfs_fh *		fh;
489	unsigned int		pgbase;
490	unsigned int		pglen;
491	struct page **		pages;
492};
493
494struct nfs3_renameres {
495	struct nfs_fattr *	fromattr;
496	struct nfs_fattr *	toattr;
497};
498
499struct nfs3_linkres {
500	struct nfs_fattr *	dir_attr;
501	struct nfs_fattr *	fattr;
502};
503
504struct nfs3_readdirres {
505	struct nfs_fattr *	dir_attr;
506	__u32 *			verf;
507	int			plus;
508};
509
510struct nfs3_getaclres {
511	struct nfs_fattr *	fattr;
512	int			mask;
513	unsigned int		acl_access_count;
514	unsigned int		acl_default_count;
515	struct posix_acl *	acl_access;
516	struct posix_acl *	acl_default;
517};
518
519#ifdef CONFIG_NFS_V4
520
521typedef u64 clientid4;
522
523struct nfs4_accessargs {
524	const struct nfs_fh *		fh;
525	u32				access;
526};
527
528struct nfs4_accessres {
529	u32				supported;
530	u32				access;
531};
532
533struct nfs4_create_arg {
534	u32				ftype;
535	union {
536		struct {
537			struct page **	pages;
538			unsigned int	len;
539		} symlink;   /* NF4LNK */
540		struct {
541			u32		specdata1;
542			u32		specdata2;
543		} device;    /* NF4BLK, NF4CHR */
544	} u;
545	const struct qstr *		name;
546	const struct nfs_server *	server;
547	const struct iattr *		attrs;
548	const struct nfs_fh *		dir_fh;
549	const u32 *			bitmask;
550};
551
552struct nfs4_create_res {
553	const struct nfs_server *	server;
554	struct nfs_fh *			fh;
555	struct nfs_fattr *		fattr;
556	struct nfs4_change_info		dir_cinfo;
557	struct nfs_fattr *		dir_fattr;
558};
559
560struct nfs4_fsinfo_arg {
561	const struct nfs_fh *		fh;
562	const u32 *			bitmask;
563};
564
565struct nfs4_getattr_arg {
566	const struct nfs_fh *		fh;
567	const u32 *			bitmask;
568};
569
570struct nfs4_getattr_res {
571	const struct nfs_server *	server;
572	struct nfs_fattr *		fattr;
573};
574
575struct nfs4_link_arg {
576	const struct nfs_fh *		fh;
577	const struct nfs_fh *		dir_fh;
578	const struct qstr *		name;
579	const u32 *			bitmask;
580};
581
582struct nfs4_link_res {
583	const struct nfs_server *	server;
584	struct nfs_fattr *		fattr;
585	struct nfs4_change_info		cinfo;
586	struct nfs_fattr *		dir_attr;
587};
588
589
590struct nfs4_lookup_arg {
591	const struct nfs_fh *		dir_fh;
592	const struct qstr *		name;
593	const u32 *			bitmask;
594};
595
596struct nfs4_lookup_res {
597	const struct nfs_server *	server;
598	struct nfs_fattr *		fattr;
599	struct nfs_fh *			fh;
600};
601
602struct nfs4_lookup_root_arg {
603	const u32 *			bitmask;
604};
605
606struct nfs4_pathconf_arg {
607	const struct nfs_fh *		fh;
608	const u32 *			bitmask;
609};
610
611struct nfs4_readdir_arg {
612	const struct nfs_fh *		fh;
613	u64				cookie;
614	nfs4_verifier			verifier;
615	u32				count;
616	struct page **			pages;	/* zero-copy data */
617	unsigned int			pgbase;	/* zero-copy data */
618	const u32 *			bitmask;
619};
620
621struct nfs4_readdir_res {
622	nfs4_verifier			verifier;
623	unsigned int			pgbase;
624};
625
626struct nfs4_readlink {
627	const struct nfs_fh *		fh;
628	unsigned int			pgbase;
629	unsigned int			pglen;   /* zero-copy data */
630	struct page **			pages;   /* zero-copy data */
631};
632
633struct nfs4_remove_arg {
634	const struct nfs_fh *		fh;
635	const struct qstr *		name;
636	const u32 *			bitmask;
637};
638
639struct nfs4_remove_res {
640	const struct nfs_server *	server;
641	struct nfs4_change_info		cinfo;
642	struct nfs_fattr *		dir_attr;
643};
644
645struct nfs4_rename_arg {
646	const struct nfs_fh *		old_dir;
647	const struct nfs_fh *		new_dir;
648	const struct qstr *		old_name;
649	const struct qstr *		new_name;
650	const u32 *			bitmask;
651};
652
653struct nfs4_rename_res {
654	const struct nfs_server *	server;
655	struct nfs4_change_info		old_cinfo;
656	struct nfs_fattr *		old_fattr;
657	struct nfs4_change_info		new_cinfo;
658	struct nfs_fattr *		new_fattr;
659};
660
661struct nfs4_setclientid {
662	const nfs4_verifier *		sc_verifier;      /* request */
663	unsigned int			sc_name_len;
664	char				sc_name[48];	  /* request */
665	u32				sc_prog;          /* request */
666	unsigned int			sc_netid_len;
667	char				sc_netid[4];	  /* request */
668	unsigned int			sc_uaddr_len;
669	char				sc_uaddr[24];     /* request */
670	u32				sc_cb_ident;      /* request */
671};
672
673struct nfs4_statfs_arg {
674	const struct nfs_fh *		fh;
675	const u32 *			bitmask;
676};
677
678struct nfs4_server_caps_res {
679	u32				attr_bitmask[2];
680	u32				acl_bitmask;
681	u32				has_links;
682	u32				has_symlinks;
683};
684
685struct nfs4_string {
686	unsigned int len;
687	char *data;
688};
689
690#define NFS4_PATHNAME_MAXCOMPONENTS 512
691struct nfs4_pathname {
692	unsigned int ncomponents;
693	struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];
694};
695
696#define NFS4_FS_LOCATION_MAXSERVERS 10
697struct nfs4_fs_location {
698	unsigned int nservers;
699	struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];
700	struct nfs4_pathname rootpath;
701};
702
703#define NFS4_FS_LOCATIONS_MAXENTRIES 10
704struct nfs4_fs_locations {
705	struct nfs_fattr fattr;
706	const struct nfs_server *server;
707	struct nfs4_pathname fs_path;
708	int nlocations;
709	struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];
710};
711
712struct nfs4_fs_locations_arg {
713	const struct nfs_fh *dir_fh;
714	const struct qstr *name;
715	struct page *page;
716	const u32 *bitmask;
717};
718
719#endif /* CONFIG_NFS_V4 */
720
721struct nfs_page;
722
723#define NFS_PAGEVEC_SIZE	(8U)
724
725struct nfs_read_data {
726	int			flags;
727	struct rpc_task		task;
728	struct inode		*inode;
729	struct rpc_cred		*cred;
730	struct nfs_fattr	fattr;	/* fattr storage */
731	struct list_head	pages;	/* Coalesced read requests */
732	struct nfs_page		*req;	/* multi ops per nfs_page */
733	struct page		**pagevec;
734	unsigned int		npages;	/* Max length of pagevec */
735	struct nfs_readargs args;
736	struct nfs_readres  res;
737#ifdef CONFIG_NFS_V4
738	unsigned long		timestamp;	/* For lease renewal */
739#endif
740	struct page		*page_array[NFS_PAGEVEC_SIZE];
741};
742
743struct nfs_write_data {
744	int			flags;
745	struct rpc_task		task;
746	struct inode		*inode;
747	struct rpc_cred		*cred;
748	struct nfs_fattr	fattr;
749	struct nfs_writeverf	verf;
750	struct list_head	pages;		/* Coalesced requests we wish to flush */
751	struct nfs_page		*req;		/* multi ops per nfs_page */
752	struct page		**pagevec;
753	unsigned int		npages;		/* Max length of pagevec */
754	struct nfs_writeargs	args;		/* argument struct */
755	struct nfs_writeres	res;		/* result struct */
756#ifdef CONFIG_NFS_V4
757	unsigned long		timestamp;	/* For lease renewal */
758#endif
759	struct page		*page_array[NFS_PAGEVEC_SIZE];
760};
761
762struct nfs_access_entry;
763
764/*
765 * RPC procedure vector for NFSv2/NFSv3 demuxing
766 */
767struct nfs_rpc_ops {
768	int	version;		/* Protocol version */
769	struct dentry_operations *dentry_ops;
770	struct inode_operations *dir_inode_ops;
771	struct inode_operations *file_inode_ops;
772
773	int	(*getroot) (struct nfs_server *, struct nfs_fh *,
774			    struct nfs_fsinfo *);
775	int	(*lookupfh)(struct nfs_server *, struct nfs_fh *,
776			    struct qstr *, struct nfs_fh *,
777			    struct nfs_fattr *);
778	int	(*getattr) (struct nfs_server *, struct nfs_fh *,
779			    struct nfs_fattr *);
780	int	(*setattr) (struct dentry *, struct nfs_fattr *,
781			    struct iattr *);
782	int	(*lookup)  (struct inode *, struct qstr *,
783			    struct nfs_fh *, struct nfs_fattr *);
784	int	(*access)  (struct inode *, struct nfs_access_entry *);
785	int	(*readlink)(struct inode *, struct page *, unsigned int,
786			    unsigned int);
787	int	(*read)    (struct nfs_read_data *);
788	int	(*write)   (struct nfs_write_data *);
789	int	(*commit)  (struct nfs_write_data *);
790	int	(*create)  (struct inode *, struct dentry *,
791			    struct iattr *, int, struct nameidata *);
792	int	(*remove)  (struct inode *, struct qstr *);
793	int	(*unlink_setup)  (struct rpc_message *,
794			    struct dentry *, struct qstr *);
795	int	(*unlink_done) (struct dentry *, struct rpc_task *);
796	int	(*rename)  (struct inode *, struct qstr *,
797			    struct inode *, struct qstr *);
798	int	(*link)    (struct inode *, struct inode *, struct qstr *);
799	int	(*symlink) (struct inode *, struct dentry *, struct page *,
800			    unsigned int, struct iattr *);
801	int	(*mkdir)   (struct inode *, struct dentry *, struct iattr *);
802	int	(*rmdir)   (struct inode *, struct qstr *);
803	int	(*readdir) (struct dentry *, struct rpc_cred *,
804			    u64, struct page *, unsigned int, int);
805	int	(*mknod)   (struct inode *, struct dentry *, struct iattr *,
806			    dev_t);
807	int	(*statfs)  (struct nfs_server *, struct nfs_fh *,
808			    struct nfs_fsstat *);
809	int	(*fsinfo)  (struct nfs_server *, struct nfs_fh *,
810			    struct nfs_fsinfo *);
811	int	(*pathconf) (struct nfs_server *, struct nfs_fh *,
812			     struct nfs_pathconf *);
813	int	(*set_capabilities)(struct nfs_server *, struct nfs_fh *);
814	__be32 *(*decode_dirent)(__be32 *, struct nfs_entry *, int plus);
815	void	(*read_setup)   (struct nfs_read_data *);
816	int	(*read_done)  (struct rpc_task *, struct nfs_read_data *);
817	void	(*write_setup)  (struct nfs_write_data *, int how);
818	int	(*write_done)  (struct rpc_task *, struct nfs_write_data *);
819	void	(*commit_setup) (struct nfs_write_data *, int how);
820	int	(*commit_done) (struct rpc_task *, struct nfs_write_data *);
821	int	(*file_open)   (struct inode *, struct file *);
822	int	(*file_release) (struct inode *, struct file *);
823	int	(*lock)(struct file *, int, struct file_lock *);
824	void	(*clear_acl_cache)(struct inode *);
825};
826
827/*
828 * 	NFS_CALL(getattr, inode, (fattr));
829 * into
830 *	NFS_PROTO(inode)->getattr(fattr);
831 */
832#define NFS_CALL(op, inode, args)	NFS_PROTO(inode)->op args
833
834/*
835 * Function vectors etc. for the NFS client
836 */
837extern const struct nfs_rpc_ops	nfs_v2_clientops;
838extern const struct nfs_rpc_ops	nfs_v3_clientops;
839extern const struct nfs_rpc_ops	nfs_v4_clientops;
840extern struct rpc_version	nfs_version2;
841extern struct rpc_version	nfs_version3;
842extern struct rpc_version	nfs_version4;
843
844extern struct rpc_version	nfsacl_version3;
845extern struct rpc_program	nfsacl_program;
846
847#endif
848