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