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