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