Blame view

include/linux/nfs_xdr.h 33.3 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef _LINUX_NFS_XDR_H
  #define _LINUX_NFS_XDR_H
b7fa0554c   Andreas Gruenbacher   [PATCH] NFS: Add ...
3
  #include <linux/nfsacl.h>
5a5ea0d48   Bryan Schumaker   NFS: Add secinfo ...
4
  #include <linux/sunrpc/gss_api.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5

40859d7ee   Chuck Lever   NFS: support larg...
6
7
8
9
10
11
12
13
14
  /*
   * To change the maximum rsize and wsize supported by the NFS client, adjust
   * NFS_MAX_FILE_IO_SIZE.  64KB is a typical maximum, but some servers can
   * support a megabyte or more.  The default is left at 4096 bytes, which is
   * reasonable for NFS over UDP.
   */
  #define NFS_MAX_FILE_IO_SIZE	(1048576U)
  #define NFS_DEF_FILE_IO_SIZE	(4096U)
  #define NFS_MIN_FILE_IO_SIZE	(1024U)
5a5ea0d48   Bryan Schumaker   NFS: Add secinfo ...
15
16
  /* Forward declaration for NFS v3 */
  struct nfs4_secinfo_flavors;
6926afd19   Trond Myklebust   NFSv4: Save the o...
17
18
19
20
  struct nfs4_string {
  	unsigned int len;
  	char *data;
  };
8b4bdcf89   Trond Myklebust   NFS: Store the fi...
21
22
23
  struct nfs_fsid {
  	uint64_t		major;
  	uint64_t		minor;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
  };
8b4bdcf89   Trond Myklebust   NFS: Store the fi...
25
26
27
28
29
30
31
  /*
   * Helper for checking equality between 2 fsids.
   */
  static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b)
  {
  	return a->major == b->major && a->minor == b->minor;
  }
88034c3d8   Andy Adamson   NFSv4.1 mdsthresh...
32
33
34
35
36
37
38
39
  struct nfs4_threshold {
  	__u32	bm;
  	__u32	l_type;
  	__u64	rd_sz;
  	__u64	wr_sz;
  	__u64	rd_io_sz;
  	__u64	wr_io_sz;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
  struct nfs_fattr {
9e6e70f8d   Trond Myklebust   NFSv4: Support NF...
41
  	unsigned int		valid;		/* which fields are valid */
bca794785   Trond Myklebust   NFS: Fix the type...
42
  	umode_t			mode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
43
44
45
  	__u32			nlink;
  	__u32			uid;
  	__u32			gid;
9fa8d66f1   Richard Kennedy   NFS: remove 8 byt...
46
  	dev_t			rdev;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
47
48
49
50
51
52
53
54
55
56
  	__u64			size;
  	union {
  		struct {
  			__u32	blocksize;
  			__u32	blocks;
  		} nfs2;
  		struct {
  			__u64	used;
  		} nfs3;
  	} du;
8b4bdcf89   Trond Myklebust   NFS: Store the fi...
57
  	struct nfs_fsid		fsid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
  	__u64			fileid;
28331a46d   Trond Myklebust   NFSv4: Ensure we ...
59
  	__u64			mounted_on_fileid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
62
  	struct timespec		atime;
  	struct timespec		mtime;
  	struct timespec		ctime;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
64
  	__u64			change_attr;	/* NFSv4 change attribute */
  	__u64			pre_change_attr;/* pre-op NFSv4 change attribute */
1ca277d88   Trond Myklebust   NFS: Shrink the s...
65
66
67
  	__u64			pre_size;	/* pre_op_attr.size	  */
  	struct timespec		pre_mtime;	/* pre_op_attr.mtime	  */
  	struct timespec		pre_ctime;	/* pre_op_attr.ctime	  */
33801147a   Trond Myklebust   NFS: Optimise ino...
68
  	unsigned long		time_start;
4704f0e27   Trond Myklebust   NFS: Fix the reso...
69
  	unsigned long		gencount;
6926afd19   Trond Myklebust   NFSv4: Save the o...
70
71
  	struct nfs4_string	*owner_name;
  	struct nfs4_string	*group_name;
88034c3d8   Andy Adamson   NFSv4.1 mdsthresh...
72
  	struct nfs4_threshold	*mdsthreshold;	/* pNFS threshold hints */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73
  };
9e6e70f8d   Trond Myklebust   NFSv4: Support NF...
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  #define NFS_ATTR_FATTR_TYPE		(1U << 0)
  #define NFS_ATTR_FATTR_MODE		(1U << 1)
  #define NFS_ATTR_FATTR_NLINK		(1U << 2)
  #define NFS_ATTR_FATTR_OWNER		(1U << 3)
  #define NFS_ATTR_FATTR_GROUP		(1U << 4)
  #define NFS_ATTR_FATTR_RDEV		(1U << 5)
  #define NFS_ATTR_FATTR_SIZE		(1U << 6)
  #define NFS_ATTR_FATTR_PRESIZE		(1U << 7)
  #define NFS_ATTR_FATTR_BLOCKS_USED	(1U << 8)
  #define NFS_ATTR_FATTR_SPACE_USED	(1U << 9)
  #define NFS_ATTR_FATTR_FSID		(1U << 10)
  #define NFS_ATTR_FATTR_FILEID		(1U << 11)
  #define NFS_ATTR_FATTR_ATIME		(1U << 12)
  #define NFS_ATTR_FATTR_MTIME		(1U << 13)
  #define NFS_ATTR_FATTR_CTIME		(1U << 14)
  #define NFS_ATTR_FATTR_PREMTIME		(1U << 15)
  #define NFS_ATTR_FATTR_PRECTIME		(1U << 16)
  #define NFS_ATTR_FATTR_CHANGE		(1U << 17)
  #define NFS_ATTR_FATTR_PRECHANGE	(1U << 18)
81934ddb8   Chuck Lever   NFS: Introduce NF...
93
94
95
96
97
98
  #define NFS_ATTR_FATTR_V4_LOCATIONS	(1U << 19)
  #define NFS_ATTR_FATTR_V4_REFERRAL	(1U << 20)
  #define NFS_ATTR_FATTR_MOUNTPOINT	(1U << 21)
  #define NFS_ATTR_FATTR_MOUNTED_ON_FILEID (1U << 22)
  #define NFS_ATTR_FATTR_OWNER_NAME	(1U << 23)
  #define NFS_ATTR_FATTR_GROUP_NAME	(1U << 24)
9e6e70f8d   Trond Myklebust   NFSv4: Support NF...
99
100
101
102
103
104
105
106
107
108
109
110
  
  #define NFS_ATTR_FATTR (NFS_ATTR_FATTR_TYPE \
  		| NFS_ATTR_FATTR_MODE \
  		| NFS_ATTR_FATTR_NLINK \
  		| NFS_ATTR_FATTR_OWNER \
  		| NFS_ATTR_FATTR_GROUP \
  		| NFS_ATTR_FATTR_RDEV \
  		| NFS_ATTR_FATTR_SIZE \
  		| NFS_ATTR_FATTR_FSID \
  		| NFS_ATTR_FATTR_FILEID \
  		| NFS_ATTR_FATTR_ATIME \
  		| NFS_ATTR_FATTR_MTIME \
3a1556e86   Trond Myklebust   NFSv2/v3: Simulat...
111
112
  		| NFS_ATTR_FATTR_CTIME \
  		| NFS_ATTR_FATTR_CHANGE)
9e6e70f8d   Trond Myklebust   NFSv4: Support NF...
113
114
115
116
117
  #define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \
  		| NFS_ATTR_FATTR_BLOCKS_USED)
  #define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \
  		| NFS_ATTR_FATTR_SPACE_USED)
  #define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \
3a1556e86   Trond Myklebust   NFSv2/v3: Simulat...
118
  		| NFS_ATTR_FATTR_SPACE_USED)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
121
122
123
124
125
126
127
128
129
130
131
132
  
  /*
   * Info on the file system
   */
  struct nfs_fsinfo {
  	struct nfs_fattr	*fattr; /* Post-op attributes */
  	__u32			rtmax;	/* max.  read transfer size */
  	__u32			rtpref;	/* pref. read transfer size */
  	__u32			rtmult;	/* reads should be multiple of this */
  	__u32			wtmax;	/* max.  write transfer size */
  	__u32			wtpref;	/* pref. write transfer size */
  	__u32			wtmult;	/* writes should be multiple of this */
  	__u32			dtpref;	/* pref. readdir transfer size */
  	__u64			maxfilesize;
6b96724e5   Ricardo Labiaga   Revalidate caches...
133
  	struct timespec		time_delta; /* server time granularity */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
134
  	__u32			lease_time; /* in seconds */
504913fbc   Andy Adamson   NFS: ask for layo...
135
  	__u32			layouttype; /* supported pnfs layout driver */
dae100c2b   Fred Isaman   pnfs: ask for lay...
136
  	__u32			blksize; /* preferred pnfs io block size */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
  };
  
  struct nfs_fsstat {
  	struct nfs_fattr	*fattr; /* Post-op attributes */
  	__u64			tbytes;	/* total size in bytes */
  	__u64			fbytes;	/* # of free bytes */
  	__u64			abytes;	/* # of bytes available to user */
  	__u64			tfiles;	/* # of files */
  	__u64			ffiles;	/* # of free files */
  	__u64			afiles;	/* # of files available to user */
  };
  
  struct nfs2_fsstat {
  	__u32			tsize;  /* Server transfer size */
  	__u32			bsize;  /* Filesystem block size */
  	__u32			blocks; /* No. of "bsize" blocks on filesystem */
  	__u32			bfree;  /* No. of free "bsize" blocks */
  	__u32			bavail; /* No. of available "bsize" blocks */
  };
  
  struct nfs_pathconf {
  	struct nfs_fattr	*fattr; /* Post-op attributes */
  	__u32			max_link; /* max # of hard links */
  	__u32			max_namelen; /* max name length */
  };
  
  struct nfs4_change_info {
  	u32			atomic;
  	u64			before;
  	u64			after;
  };
cee54fc94   Trond Myklebust   NFSv4: Add functi...
168
  struct nfs_seqid;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
169

557134a39   Andy Adamson   nfs41: sessions c...
170
171
  /* nfs41 sessions channel attributes */
  struct nfs4_channel_attrs {
557134a39   Andy Adamson   nfs41: sessions c...
172
173
174
175
176
177
178
179
180
181
182
  	u32			max_rqst_sz;
  	u32			max_resp_sz;
  	u32			max_resp_sz_cached;
  	u32			max_ops;
  	u32			max_reqs;
  };
  
  /* nfs41 sessions slot seqid */
  struct nfs4_slot {
  	u32		 	seq_nr;
  };
9ff71c3a9   Benny Halevy   nfs41: client xdr...
183
  struct nfs4_sequence_args {
f3752975c   Benny Halevy   nfs41: nfs41: pas...
184
  	struct nfs4_session	*sa_session;
45d43c291   Trond Myklebust   NFSv4.1: Convert ...
185
  	u32			sa_slotid;
fbcd4abcb   Andy Adamson   nfs41: setup_sequ...
186
  	u8			sa_cache_this;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
187
188
189
  };
  
  struct nfs4_sequence_res {
f3752975c   Benny Halevy   nfs41: nfs41: pas...
190
  	struct nfs4_session	*sr_session;
dfb4f3098   Benny Halevy   NFSv4.1: keep seq...
191
  	struct nfs4_slot	*sr_slot;	/* slot used to send request */
fbcd4abcb   Andy Adamson   nfs41: setup_sequ...
192
  	int			sr_status;	/* sequence operation status */
a01878aac   Richard Kennedy   NFS: reorder nfs4...
193
  	unsigned long		sr_renewal_time;
0629e370d   Alexandros Batsakis   nfs41: check SEQU...
194
  	u32			sr_status_flags;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
195
  };
2050f0cc0   Andy Adamson   nfs41: get_lease_...
196
197
198
199
200
201
202
203
  struct nfs4_get_lease_time_args {
  	struct nfs4_sequence_args	la_seq_args;
  };
  
  struct nfs4_get_lease_time_res {
  	struct nfs_fsinfo	       *lr_fsinfo;
  	struct nfs4_sequence_res	lr_seq_res;
  };
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
204
205
206
  #define PNFS_LAYOUT_MAXSIZE 4096
  
  struct nfs4_layoutdriver_data {
35124a099   Weston Andros Adamson   Cleanup XDR parsi...
207
208
  	struct page **pages;
  	__u32 pglen;
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
209
  	__u32 len;
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
  };
  
  struct pnfs_layout_range {
  	u32 iomode;
  	u64 offset;
  	u64 length;
  };
  
  struct nfs4_layoutget_args {
  	__u32 type;
  	struct pnfs_layout_range range;
  	__u64 minlength;
  	__u32 maxcount;
  	struct inode *inode;
  	struct nfs_open_context *ctx;
  	struct nfs4_sequence_args seq_args;
cf7d63f1f   Fred Isaman   pnfs: serialize L...
226
  	nfs4_stateid stateid;
35124a099   Weston Andros Adamson   Cleanup XDR parsi...
227
  	struct nfs4_layoutdriver_data layout;
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
228
229
230
231
232
233
234
  };
  
  struct nfs4_layoutget_res {
  	__u32 return_on_close;
  	struct pnfs_layout_range range;
  	__u32 type;
  	nfs4_stateid stateid;
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
235
  	struct nfs4_sequence_res seq_res;
35124a099   Weston Andros Adamson   Cleanup XDR parsi...
236
  	struct nfs4_layoutdriver_data *layoutp;
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
237
238
239
240
241
242
  };
  
  struct nfs4_layoutget {
  	struct nfs4_layoutget_args args;
  	struct nfs4_layoutget_res res;
  	struct pnfs_layout_segment **lsegpp;
a75b9df9d   Trond Myklebust   NFSv4.1: Ensure t...
243
  	gfp_t gfp_flags;
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
244
  };
7f11d8d38   Andy Adamson   pnfs: GETDEVICELIST
245
246
247
248
249
250
251
252
253
254
  struct nfs4_getdevicelist_args {
  	const struct nfs_fh *fh;
  	u32 layoutclass;
  	struct nfs4_sequence_args seq_args;
  };
  
  struct nfs4_getdevicelist_res {
  	struct pnfs_devicelist *devlist;
  	struct nfs4_sequence_res seq_res;
  };
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
255
256
257
258
259
260
261
262
263
  struct nfs4_getdeviceinfo_args {
  	struct pnfs_device *pdev;
  	struct nfs4_sequence_args seq_args;
  };
  
  struct nfs4_getdeviceinfo_res {
  	struct pnfs_device *pdev;
  	struct nfs4_sequence_res seq_res;
  };
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
264
265
266
267
268
269
270
271
272
273
274
275
  struct nfs4_layoutcommit_args {
  	nfs4_stateid stateid;
  	__u64 lastbytewritten;
  	struct inode *inode;
  	const u32 *bitmask;
  	struct nfs4_sequence_args seq_args;
  };
  
  struct nfs4_layoutcommit_res {
  	struct nfs_fattr *fattr;
  	const struct nfs_server *server;
  	struct nfs4_sequence_res seq_res;
db29c0890   Andy Adamson   pnfs: cleanup_lay...
276
  	int status;
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
277
278
279
280
281
  };
  
  struct nfs4_layoutcommit_data {
  	struct rpc_task task;
  	struct nfs_fattr fattr;
a9bae5666   Peng Tao   pnfs: let layoutc...
282
  	struct list_head lseg_list;
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
283
284
285
286
  	struct rpc_cred *cred;
  	struct nfs4_layoutcommit_args args;
  	struct nfs4_layoutcommit_res res;
  };
cbe826036   Benny Halevy   pnfs: layoutreturn
287
  struct nfs4_layoutreturn_args {
a56aaa02b   Trond Myklebust   NFSv4.1: Clean up...
288
  	struct pnfs_layout_hdr *layout;
cbe826036   Benny Halevy   pnfs: layoutreturn
289
290
  	struct inode *inode;
  	nfs4_stateid stateid;
a56aaa02b   Trond Myklebust   NFSv4.1: Clean up...
291
  	__u32   layout_type;
cbe826036   Benny Halevy   pnfs: layoutreturn
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
  	struct nfs4_sequence_args seq_args;
  };
  
  struct nfs4_layoutreturn_res {
  	struct nfs4_sequence_res seq_res;
  	u32 lrs_present;
  	nfs4_stateid stateid;
  };
  
  struct nfs4_layoutreturn {
  	struct nfs4_layoutreturn_args args;
  	struct nfs4_layoutreturn_res res;
  	struct rpc_cred *cred;
  	struct nfs_client *clp;
  	int rpc_status;
  };
95b72eb0b   Trond Myklebust   NFSv4: Ensure we ...
308
309
310
311
  struct stateowner_id {
  	__u64	create_time;
  	__u32	uniquifier;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
312
313
314
315
316
  /*
   * Arguments to the open call.
   */
  struct nfs_openargs {
  	const struct nfs_fh *	fh;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
317
  	struct nfs_seqid *	seqid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
318
  	int			open_flags;
dc0b027df   Trond Myklebust   NFSv4: Convert th...
319
  	fmode_t			fmode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
320
  	__u64                   clientid;
95b72eb0b   Trond Myklebust   NFSv4: Ensure we ...
321
  	struct stateowner_id	id;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
322
  	union {
d77d76ffb   Trond Myklebust   NFSv41: Clean up ...
323
324
325
326
  		struct {
  			struct iattr *  attrs;    /* UNCHECKED, GUARDED */
  			nfs4_verifier   verifier; /* EXCLUSIVE */
  		};
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
327
  		nfs4_stateid	delegation;		/* CLAIM_DELEGATE_CUR */
bd7bf9d54   Trond Myklebust   NFSv4: Convert de...
328
  		fmode_t		delegation_type;	/* CLAIM_PREVIOUS */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
329
330
331
332
  	} u;
  	const struct qstr *	name;
  	const struct nfs_server *server;	 /* Needed for ID mapping */
  	const u32 *		bitmask;
1549210fc   Trond Myklebust   NFSv4: Fix an Oop...
333
  	const u32 *		open_bitmap;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
334
  	__u32			claim;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
335
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
336
337
338
339
340
341
342
343
  };
  
  struct nfs_openres {
  	nfs4_stateid            stateid;
  	struct nfs_fh           fh;
  	struct nfs4_change_info	cinfo;
  	__u32                   rflags;
  	struct nfs_fattr *      f_attr;
c1d519312   Trond Myklebust   NFSv4: Only incre...
344
  	struct nfs_seqid *	seqid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
345
  	const struct nfs_server *server;
bd7bf9d54   Trond Myklebust   NFSv4: Convert de...
346
  	fmode_t			delegation_type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
347
348
349
  	nfs4_stateid		delegation;
  	__u32			do_recall;
  	__u64			maxsize;
aa53ed541   Jeff Layton   NFS4: on a O_EXCL...
350
  	__u32			attrset[NFS4_BITMAP_SIZE];
6926afd19   Trond Myklebust   NFSv4: Save the o...
351
352
  	struct nfs4_string	*owner;
  	struct nfs4_string	*group_owner;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
353
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
354
355
356
357
358
359
360
  };
  
  /*
   * Arguments to the open_confirm call.
   */
  struct nfs_open_confirmargs {
  	const struct nfs_fh *	fh;
cdd4e68b5   Trond Myklebust   NFSv4: Make open_...
361
  	nfs4_stateid *		stateid;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
362
  	struct nfs_seqid *	seqid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
363
364
365
366
  };
  
  struct nfs_open_confirmres {
  	nfs4_stateid            stateid;
c1d519312   Trond Myklebust   NFSv4: Only incre...
367
  	struct nfs_seqid *	seqid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
368
369
370
371
372
373
374
  };
  
  /*
   * Arguments to the close call.
   */
  struct nfs_closeargs {
  	struct nfs_fh *         fh;
9512135df   Trond Myklebust   NFSv4: Fix a pote...
375
  	nfs4_stateid *		stateid;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
376
  	struct nfs_seqid *	seqid;
dc0b027df   Trond Myklebust   NFSv4: Convert th...
377
  	fmode_t			fmode;
516a6af64   Trond Myklebust   NFS: Add optional...
378
  	const u32 *		bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
379
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
380
381
382
383
  };
  
  struct nfs_closeres {
  	nfs4_stateid            stateid;
516a6af64   Trond Myklebust   NFS: Add optional...
384
  	struct nfs_fattr *	fattr;
c1d519312   Trond Myklebust   NFSv4: Only incre...
385
  	struct nfs_seqid *	seqid;
516a6af64   Trond Myklebust   NFS: Add optional...
386
  	const struct nfs_server *server;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
387
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
388
389
390
391
392
  };
  /*
   *  * Arguments to the lock,lockt, and locku call.
   *   */
  struct nfs_lowner {
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
393
  	__u64			clientid;
9f958ab88   Trond Myklebust   NFSv4: Reduce the...
394
  	__u64			id;
d035c36c5   Trond Myklebust   NFSv4: Ensure con...
395
  	dev_t			s_dev;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
396
  };
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
397
398
399
  struct nfs_lock_args {
  	struct nfs_fh *		fh;
  	struct file_lock *	fl;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
400
  	struct nfs_seqid *	lock_seqid;
06735b345   Trond Myklebust   NFSv4: Fix up han...
401
402
403
  	nfs4_stateid *		lock_stateid;
  	struct nfs_seqid *	open_seqid;
  	nfs4_stateid *		open_stateid;
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
404
405
406
407
  	struct nfs_lowner	lock_owner;
  	unsigned char		block : 1;
  	unsigned char		reclaim : 1;
  	unsigned char		new_lock_owner : 1;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
408
  	struct nfs4_sequence_args	seq_args;
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
409
410
411
  };
  
  struct nfs_lock_res {
c1d519312   Trond Myklebust   NFSv4: Only incre...
412
413
414
  	nfs4_stateid		stateid;
  	struct nfs_seqid *	lock_seqid;
  	struct nfs_seqid *	open_seqid;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
415
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
416
  };
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
417
418
419
  struct nfs_locku_args {
  	struct nfs_fh *		fh;
  	struct file_lock *	fl;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
420
  	struct nfs_seqid *	seqid;
faf5f49c2   Trond Myklebust   NFSv4: Make NFS c...
421
  	nfs4_stateid *		stateid;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
422
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
423
  };
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
424
  struct nfs_locku_res {
c1d519312   Trond Myklebust   NFSv4: Only incre...
425
426
  	nfs4_stateid		stateid;
  	struct nfs_seqid *	seqid;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
427
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
428
  };
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
429
430
431
432
  struct nfs_lockt_args {
  	struct nfs_fh *		fh;
  	struct file_lock *	fl;
  	struct nfs_lowner	lock_owner;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
433
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
434
  };
911d1aaf2   Trond Myklebust   NFSv4: locking XD...
435
436
  struct nfs_lockt_res {
  	struct file_lock *	denied; /* LOCK, LOCKT failed */
9ff71c3a9   Benny Halevy   nfs41: client xdr...
437
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
438
  };
d3c7b7ccc   Trond Myklebust   NFSv4: Add suppor...
439
440
441
  struct nfs_release_lockowner_args {
  	struct nfs_lowner	lock_owner;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
442
443
444
  struct nfs4_delegreturnargs {
  	const struct nfs_fh *fhandle;
  	const nfs4_stateid *stateid;
fa178f29c   Trond Myklebust   NFSv4: Ensure DEL...
445
  	const u32 * bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
446
  	struct nfs4_sequence_args	seq_args;
fa178f29c   Trond Myklebust   NFSv4: Ensure DEL...
447
448
449
450
451
  };
  
  struct nfs4_delegreturnres {
  	struct nfs_fattr * fattr;
  	const struct nfs_server *server;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
452
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
453
454
455
456
457
  };
  
  /*
   * Arguments to the read call.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
458
459
460
  struct nfs_readargs {
  	struct nfs_fh *		fh;
  	struct nfs_open_context *context;
f11ac8db5   Trond Myklebust   NFSv4: Ensure tha...
461
  	struct nfs_lock_context *lock_context;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
462
463
464
465
  	__u64			offset;
  	__u32			count;
  	unsigned int		pgbase;
  	struct page **		pages;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
466
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
467
468
469
470
471
472
  };
  
  struct nfs_readres {
  	struct nfs_fattr *	fattr;
  	__u32			count;
  	int                     eof;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
473
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
474
475
476
477
478
  };
  
  /*
   * Arguments to the write call.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
479
480
481
  struct nfs_writeargs {
  	struct nfs_fh *		fh;
  	struct nfs_open_context *context;
f11ac8db5   Trond Myklebust   NFSv4: Ensure tha...
482
  	struct nfs_lock_context *lock_context;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
483
484
485
486
487
  	__u64			offset;
  	__u32			count;
  	enum nfs3_stable_how	stable;
  	unsigned int		pgbase;
  	struct page **		pages;
4f9838c7e   Trond Myklebust   NFSv4: Add post-o...
488
  	const u32 *		bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
489
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
490
491
492
493
  };
  
  struct nfs_writeverf {
  	enum nfs3_stable_how	committed;
bc4785cd4   Al Viro   [PATCH] nfs: veri...
494
  	__be32			verifier[2];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
495
496
497
498
499
500
  };
  
  struct nfs_writeres {
  	struct nfs_fattr *	fattr;
  	struct nfs_writeverf *	verf;
  	__u32			count;
4f9838c7e   Trond Myklebust   NFSv4: Add post-o...
501
  	const struct nfs_server *server;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
502
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
503
504
505
  };
  
  /*
0b7c01533   Fred Isaman   NFS: add a struct...
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
   * Arguments to the commit call.
   */
  struct nfs_commitargs {
  	struct nfs_fh		*fh;
  	__u64			offset;
  	__u32			count;
  	const u32		*bitmask;
  	struct nfs4_sequence_args	seq_args;
  };
  
  struct nfs_commitres {
  	struct nfs_fattr	*fattr;
  	struct nfs_writeverf	*verf;
  	const struct nfs_server *server;
  	struct nfs4_sequence_res	seq_res;
  };
  
  /*
4fdc17b2a   Trond Myklebust   NFS: Introduce st...
524
525
526
527
528
   * Common arguments to the unlink call
   */
  struct nfs_removeargs {
  	const struct nfs_fh	*fh;
  	struct qstr		name;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
529
  	struct nfs4_sequence_args	seq_args;
4fdc17b2a   Trond Myklebust   NFS: Introduce st...
530
531
532
533
  };
  
  struct nfs_removeres {
  	const struct nfs_server *server;
d346890be   Trond Myklebust   NFS: Reduce stack...
534
  	struct nfs_fattr	*dir_attr;
4fdc17b2a   Trond Myklebust   NFS: Introduce st...
535
  	struct nfs4_change_info	cinfo;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
536
  	struct nfs4_sequence_res 	seq_res;
4fdc17b2a   Trond Myklebust   NFS: Introduce st...
537
538
539
  };
  
  /*
920769f03   Jeff Layton   nfs: standardize ...
540
541
542
543
544
545
546
   * Common arguments to the rename call
   */
  struct nfs_renameargs {
  	const struct nfs_fh		*old_dir;
  	const struct nfs_fh		*new_dir;
  	const struct qstr		*old_name;
  	const struct qstr		*new_name;
920769f03   Jeff Layton   nfs: standardize ...
547
548
  	struct nfs4_sequence_args	seq_args;
  };
e8582a8b9   Jeff Layton   nfs: standardize ...
549
550
551
552
553
554
555
556
  struct nfs_renameres {
  	const struct nfs_server		*server;
  	struct nfs4_change_info		old_cinfo;
  	struct nfs_fattr		*old_fattr;
  	struct nfs4_change_info		new_cinfo;
  	struct nfs_fattr		*new_fattr;
  	struct nfs4_sequence_res	seq_res;
  };
920769f03   Jeff Layton   nfs: standardize ...
557
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
558
559
560
561
562
563
564
565
566
567
568
   * Argument struct for decode_entry function
   */
  struct nfs_entry {
  	__u64			ino;
  	__u64			cookie,
  				prev_cookie;
  	const char *		name;
  	unsigned int		len;
  	int			eof;
  	struct nfs_fh *		fh;
  	struct nfs_fattr *	fattr;
0b26a0bf6   Trond Myklebust   NFS: Ensure we re...
569
  	unsigned char		d_type;
573c4e1ef   Chuck Lever   NFS: Simplify ->d...
570
  	struct nfs_server *	server;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
  };
  
  /*
   * The following types are for NFSv2 only.
   */
  struct nfs_sattrargs {
  	struct nfs_fh *		fh;
  	struct iattr *		sattr;
  };
  
  struct nfs_diropargs {
  	struct nfs_fh *		fh;
  	const char *		name;
  	unsigned int		len;
  };
  
  struct nfs_createargs {
  	struct nfs_fh *		fh;
  	const char *		name;
  	unsigned int		len;
  	struct iattr *		sattr;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
593
594
595
596
597
598
  struct nfs_setattrargs {
  	struct nfs_fh *                 fh;
  	nfs4_stateid                    stateid;
  	struct iattr *                  iap;
  	const struct nfs_server *	server; /* Needed for name mapping */
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
599
  	struct nfs4_sequence_args 	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
600
  };
23ec6965c   J. Bruce Fields   [PATCH] NFSv4: Cl...
601
602
603
604
605
  struct nfs_setaclargs {
  	struct nfs_fh *			fh;
  	size_t				acl_len;
  	unsigned int			acl_pgbase;
  	struct page **			acl_pages;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
606
  	struct nfs4_sequence_args	seq_args;
23ec6965c   J. Bruce Fields   [PATCH] NFSv4: Cl...
607
  };
73c403a9a   Benny Halevy   nfs41: use nfs4_s...
608
609
610
  struct nfs_setaclres {
  	struct nfs4_sequence_res	seq_res;
  };
029d105e6   J. Bruce Fields   [PATCH] NFSv4: Cl...
611
612
613
614
615
  struct nfs_getaclargs {
  	struct nfs_fh *			fh;
  	size_t				acl_len;
  	unsigned int			acl_pgbase;
  	struct page **			acl_pages;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
616
  	struct nfs4_sequence_args 	seq_args;
029d105e6   J. Bruce Fields   [PATCH] NFSv4: Cl...
617
  };
bf118a342   Andy Adamson   NFSv4: include bi...
618
619
  /* getxattr ACL interface flags */
  #define NFS4_ACL_LEN_REQUEST	0x0001	/* zero length getxattr buffer */
663c79b3c   Benny Halevy   nfs41: use nfs4_g...
620
621
  struct nfs_getaclres {
  	size_t				acl_len;
bf118a342   Andy Adamson   NFSv4: include bi...
622
623
  	size_t				acl_data_offset;
  	int				acl_flags;
331818f1c   Trond Myklebust   NFSv4: Fix an Oop...
624
  	struct page *			acl_scratch;
663c79b3c   Benny Halevy   nfs41: use nfs4_g...
625
626
  	struct nfs4_sequence_res	seq_res;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
627
628
629
  struct nfs_setattrres {
  	struct nfs_fattr *              fattr;
  	const struct nfs_server *	server;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
630
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
631
632
633
634
635
636
637
638
639
640
641
642
643
  };
  
  struct nfs_linkargs {
  	struct nfs_fh *		fromfh;
  	struct nfs_fh *		tofh;
  	const char *		toname;
  	unsigned int		tolen;
  };
  
  struct nfs_symlinkargs {
  	struct nfs_fh *		fromfh;
  	const char *		fromname;
  	unsigned int		fromlen;
94a6d7532   Chuck Lever   NFS: Use cached p...
644
645
  	struct page **		pages;
  	unsigned int		pathlen;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
646
647
648
649
650
651
652
653
654
  	struct iattr *		sattr;
  };
  
  struct nfs_readdirargs {
  	struct nfs_fh *		fh;
  	__u32			cookie;
  	unsigned int		count;
  	struct page **		pages;
  };
b7fa0554c   Andreas Gruenbacher   [PATCH] NFS: Add ...
655
656
657
658
659
660
661
662
663
664
665
  struct nfs3_getaclargs {
  	struct nfs_fh *		fh;
  	int			mask;
  	struct page **		pages;
  };
  
  struct nfs3_setaclargs {
  	struct inode *		inode;
  	int			mask;
  	struct posix_acl *	acl_access;
  	struct posix_acl *	acl_default;
ae46141ff   Trond Myklebust   NFSv3: Fix posix ...
666
667
  	size_t			len;
  	unsigned int		npages;
b7fa0554c   Andreas Gruenbacher   [PATCH] NFS: Add ...
668
669
  	struct page **		pages;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
  struct nfs_diropok {
  	struct nfs_fh *		fh;
  	struct nfs_fattr *	fattr;
  };
  
  struct nfs_readlinkargs {
  	struct nfs_fh *		fh;
  	unsigned int		pgbase;
  	unsigned int		pglen;
  	struct page **		pages;
  };
  
  struct nfs3_sattrargs {
  	struct nfs_fh *		fh;
  	struct iattr *		sattr;
  	unsigned int		guard;
  	struct timespec		guardtime;
  };
  
  struct nfs3_diropargs {
  	struct nfs_fh *		fh;
  	const char *		name;
  	unsigned int		len;
  };
  
  struct nfs3_accessargs {
  	struct nfs_fh *		fh;
  	__u32			access;
  };
  
  struct nfs3_createargs {
  	struct nfs_fh *		fh;
  	const char *		name;
  	unsigned int		len;
  	struct iattr *		sattr;
  	enum nfs3_createmode	createmode;
bc4785cd4   Al Viro   [PATCH] nfs: veri...
706
  	__be32			verifier[2];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
707
708
709
710
711
712
713
714
715
716
717
718
719
  };
  
  struct nfs3_mkdirargs {
  	struct nfs_fh *		fh;
  	const char *		name;
  	unsigned int		len;
  	struct iattr *		sattr;
  };
  
  struct nfs3_symlinkargs {
  	struct nfs_fh *		fromfh;
  	const char *		fromname;
  	unsigned int		fromlen;
94a6d7532   Chuck Lever   NFS: Use cached p...
720
721
  	struct page **		pages;
  	unsigned int		pathlen;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
722
723
724
725
726
727
728
729
730
731
732
  	struct iattr *		sattr;
  };
  
  struct nfs3_mknodargs {
  	struct nfs_fh *		fh;
  	const char *		name;
  	unsigned int		len;
  	enum nfs3_ftype		type;
  	struct iattr *		sattr;
  	dev_t			rdev;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
733
734
735
736
737
738
739
740
741
742
  struct nfs3_linkargs {
  	struct nfs_fh *		fromfh;
  	struct nfs_fh *		tofh;
  	const char *		toname;
  	unsigned int		tolen;
  };
  
  struct nfs3_readdirargs {
  	struct nfs_fh *		fh;
  	__u64			cookie;
bc4785cd4   Al Viro   [PATCH] nfs: veri...
743
  	__be32			verf[2];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
  	int			plus;
  	unsigned int            count;
  	struct page **		pages;
  };
  
  struct nfs3_diropres {
  	struct nfs_fattr *	dir_attr;
  	struct nfs_fh *		fh;
  	struct nfs_fattr *	fattr;
  };
  
  struct nfs3_accessres {
  	struct nfs_fattr *	fattr;
  	__u32			access;
  };
  
  struct nfs3_readlinkargs {
  	struct nfs_fh *		fh;
  	unsigned int		pgbase;
  	unsigned int		pglen;
  	struct page **		pages;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
766
767
768
769
770
771
772
  struct nfs3_linkres {
  	struct nfs_fattr *	dir_attr;
  	struct nfs_fattr *	fattr;
  };
  
  struct nfs3_readdirres {
  	struct nfs_fattr *	dir_attr;
bc4785cd4   Al Viro   [PATCH] nfs: veri...
773
  	__be32 *		verf;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
774
775
  	int			plus;
  };
b7fa0554c   Andreas Gruenbacher   [PATCH] NFS: Add ...
776
777
778
779
780
781
782
783
  struct nfs3_getaclres {
  	struct nfs_fattr *	fattr;
  	int			mask;
  	unsigned int		acl_access_count;
  	unsigned int		acl_default_count;
  	struct posix_acl *	acl_access;
  	struct posix_acl *	acl_default;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
784
785
786
787
788
789
  #ifdef CONFIG_NFS_V4
  
  typedef u64 clientid4;
  
  struct nfs4_accessargs {
  	const struct nfs_fh *		fh;
76b32999d   Trond Myklebust   NFSv4: Make NFSv4...
790
  	const u32 *			bitmask;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
791
  	u32				access;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
792
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
793
794
795
  };
  
  struct nfs4_accessres {
76b32999d   Trond Myklebust   NFSv4: Make NFSv4...
796
797
  	const struct nfs_server *	server;
  	struct nfs_fattr *		fattr;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
798
799
  	u32				supported;
  	u32				access;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
800
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
801
802
803
804
805
  };
  
  struct nfs4_create_arg {
  	u32				ftype;
  	union {
94a6d7532   Chuck Lever   NFS: Use cached p...
806
807
808
809
  		struct {
  			struct page **	pages;
  			unsigned int	len;
  		} symlink;   /* NF4LNK */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
810
811
812
813
814
815
816
817
818
819
  		struct {
  			u32		specdata1;
  			u32		specdata2;
  		} device;    /* NF4BLK, NF4CHR */
  	} u;
  	const struct qstr *		name;
  	const struct nfs_server *	server;
  	const struct iattr *		attrs;
  	const struct nfs_fh *		dir_fh;
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
820
  	struct nfs4_sequence_args 	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
821
822
823
824
825
826
827
  };
  
  struct nfs4_create_res {
  	const struct nfs_server *	server;
  	struct nfs_fh *			fh;
  	struct nfs_fattr *		fattr;
  	struct nfs4_change_info		dir_cinfo;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
828
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
829
830
831
832
833
  };
  
  struct nfs4_fsinfo_arg {
  	const struct nfs_fh *		fh;
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
834
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
835
  };
3dda5e434   Benny Halevy   nfs41: use nfs4_f...
836
837
838
839
  struct nfs4_fsinfo_res {
  	struct nfs_fsinfo	       *fsinfo;
  	struct nfs4_sequence_res	seq_res;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
840
841
842
  struct nfs4_getattr_arg {
  	const struct nfs_fh *		fh;
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
843
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
844
845
846
847
848
  };
  
  struct nfs4_getattr_res {
  	const struct nfs_server *	server;
  	struct nfs_fattr *		fattr;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
849
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
850
851
852
853
854
855
  };
  
  struct nfs4_link_arg {
  	const struct nfs_fh *		fh;
  	const struct nfs_fh *		dir_fh;
  	const struct qstr *		name;
91ba2eeec   Trond Myklebust   NFSv4: Add post-o...
856
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
857
  	struct nfs4_sequence_args 	seq_args;
91ba2eeec   Trond Myklebust   NFSv4: Add post-o...
858
859
860
861
862
863
864
  };
  
  struct nfs4_link_res {
  	const struct nfs_server *	server;
  	struct nfs_fattr *		fattr;
  	struct nfs4_change_info		cinfo;
  	struct nfs_fattr *		dir_attr;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
865
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
866
  };
91ba2eeec   Trond Myklebust   NFSv4: Add post-o...
867

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
868
869
870
871
  struct nfs4_lookup_arg {
  	const struct nfs_fh *		dir_fh;
  	const struct qstr *		name;
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
872
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
873
874
875
876
877
878
  };
  
  struct nfs4_lookup_res {
  	const struct nfs_server *	server;
  	struct nfs_fattr *		fattr;
  	struct nfs_fh *			fh;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
879
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
880
881
882
883
  };
  
  struct nfs4_lookup_root_arg {
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
884
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
885
886
887
888
889
  };
  
  struct nfs4_pathconf_arg {
  	const struct nfs_fh *		fh;
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
890
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
891
  };
d45b2989a   Benny Halevy   nfs41: use nfs4_p...
892
893
894
895
  struct nfs4_pathconf_res {
  	struct nfs_pathconf	       *pathconf;
  	struct nfs4_sequence_res	seq_res;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
896
897
898
899
900
901
902
903
  struct nfs4_readdir_arg {
  	const struct nfs_fh *		fh;
  	u64				cookie;
  	nfs4_verifier			verifier;
  	u32				count;
  	struct page **			pages;	/* zero-copy data */
  	unsigned int			pgbase;	/* zero-copy data */
  	const u32 *			bitmask;
82f2e5472   Bryan Schumaker   NFS: Readdir plus...
904
  	int				plus;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
905
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
906
907
908
909
910
  };
  
  struct nfs4_readdir_res {
  	nfs4_verifier			verifier;
  	unsigned int			pgbase;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
911
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
912
913
914
915
916
917
918
  };
  
  struct nfs4_readlink {
  	const struct nfs_fh *		fh;
  	unsigned int			pgbase;
  	unsigned int			pglen;   /* zero-copy data */
  	struct page **			pages;   /* zero-copy data */
9ff71c3a9   Benny Halevy   nfs41: client xdr...
919
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
920
  };
f50c70008   Benny Halevy   nfs41: use nfs4_r...
921
922
923
  struct nfs4_readlink_res {
  	struct nfs4_sequence_res	seq_res;
  };
19d771f3c   Trond Myklebust   NFS: Save padding...
924
  #define NFS4_SETCLIENTID_NAMELEN	(127)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
925
  struct nfs4_setclientid {
cc38bac3a   Chuck Lever   NFS: Ensure NFSv4...
926
  	const nfs4_verifier *		sc_verifier;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
927
  	unsigned int			sc_name_len;
d1ce02e16   Chuck Lever   NFS: SETCLIENTID ...
928
  	char				sc_name[NFS4_SETCLIENTID_NAMELEN + 1];
cc38bac3a   Chuck Lever   NFS: Ensure NFSv4...
929
  	u32				sc_prog;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
930
  	unsigned int			sc_netid_len;
d1ce02e16   Chuck Lever   NFS: SETCLIENTID ...
931
  	char				sc_netid[RPCBIND_MAXNETIDLEN + 1];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
932
  	unsigned int			sc_uaddr_len;
d1ce02e16   Chuck Lever   NFS: SETCLIENTID ...
933
  	char				sc_uaddr[RPCBIND_MAXUADDRLEN + 1];
cc38bac3a   Chuck Lever   NFS: Ensure NFSv4...
934
  	u32				sc_cb_ident;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
935
  };
bb8b27e50   Trond Myklebust   NFSv4: Clean up t...
936
937
938
939
  struct nfs4_setclientid_res {
  	u64				clientid;
  	nfs4_verifier			confirm;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
940
941
942
  struct nfs4_statfs_arg {
  	const struct nfs_fh *		fh;
  	const u32 *			bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
943
  	struct nfs4_sequence_args	seq_args;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
944
  };
24ad148a0   Benny Halevy   nfs41: use nfs4_s...
945
946
947
948
  struct nfs4_statfs_res {
  	struct nfs_fsstat	       *fsstat;
  	struct nfs4_sequence_res	seq_res;
  };
43652ad55   Benny Halevy   nfs41: use nfs4_s...
949
950
951
952
  struct nfs4_server_caps_arg {
  	struct nfs_fh		       *fhandle;
  	struct nfs4_sequence_args	seq_args;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
953
  struct nfs4_server_caps_res {
dae100c2b   Fred Isaman   pnfs: ask for lay...
954
  	u32				attr_bitmask[3];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
955
956
957
  	u32				acl_bitmask;
  	u32				has_links;
  	u32				has_symlinks;
264e6351c   Chuck Lever   NFS: Request fh_e...
958
  	u32				fh_expire_type;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
959
  	struct nfs4_sequence_res	seq_res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
960
  };
7aaa0b3bd   Manoj Naik   NFSv4: convert fs...
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
  #define NFS4_PATHNAME_MAXCOMPONENTS 512
  struct nfs4_pathname {
  	unsigned int ncomponents;
  	struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];
  };
  
  #define NFS4_FS_LOCATION_MAXSERVERS 10
  struct nfs4_fs_location {
  	unsigned int nservers;
  	struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];
  	struct nfs4_pathname rootpath;
  };
  
  #define NFS4_FS_LOCATIONS_MAXENTRIES 10
  struct nfs4_fs_locations {
683b57b43   Trond Myklebust   NFSv4: Implement ...
976
977
  	struct nfs_fattr fattr;
  	const struct nfs_server *server;
7aaa0b3bd   Manoj Naik   NFSv4: convert fs...
978
  	struct nfs4_pathname fs_path;
683b57b43   Trond Myklebust   NFSv4: Implement ...
979
  	int nlocations;
7aaa0b3bd   Manoj Naik   NFSv4: convert fs...
980
  	struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];
683b57b43   Trond Myklebust   NFSv4: Implement ...
981
982
983
984
985
986
987
  };
  
  struct nfs4_fs_locations_arg {
  	const struct nfs_fh *dir_fh;
  	const struct qstr *name;
  	struct page *page;
  	const u32 *bitmask;
9ff71c3a9   Benny Halevy   nfs41: client xdr...
988
  	struct nfs4_sequence_args	seq_args;
683b57b43   Trond Myklebust   NFSv4: Implement ...
989
  };
22958463d   Benny Halevy   nfs41: use nfs4_f...
990
991
992
993
  struct nfs4_fs_locations_res {
  	struct nfs4_fs_locations       *fs_locations;
  	struct nfs4_sequence_res	seq_res;
  };
5a5ea0d48   Bryan Schumaker   NFS: Add secinfo ...
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
  struct nfs4_secinfo_oid {
  	unsigned int len;
  	char data[GSS_OID_MAX_LEN];
  };
  
  struct nfs4_secinfo_gss {
  	struct nfs4_secinfo_oid sec_oid4;
  	unsigned int qop4;
  	unsigned int service;
  };
  
  struct nfs4_secinfo_flavor {
  	unsigned int 		flavor;
  	struct nfs4_secinfo_gss	gss;
  };
  
  struct nfs4_secinfo_flavors {
  	unsigned int num_flavors;
  	struct nfs4_secinfo_flavor flavors[0];
  };
  
  struct nfs4_secinfo_arg {
  	const struct nfs_fh		*dir_fh;
  	const struct qstr		*name;
  	struct nfs4_sequence_args	seq_args;
  };
  
  struct nfs4_secinfo_res {
  	struct nfs4_secinfo_flavors	*flavors;
  	struct nfs4_sequence_res	seq_res;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1025
  #endif /* CONFIG_NFS_V4 */
99fe60d06   Benny Halevy   nfs41: exchange_i...
1026
1027
1028
1029
1030
1031
  struct nfstime4 {
  	u64	seconds;
  	u32	nseconds;
  };
  
  #ifdef CONFIG_NFS_V4_1
ea2cf2282   Fred Isaman   NFS: create struc...
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
  
  struct pnfs_commit_bucket {
  	struct list_head written;
  	struct list_head committing;
  	struct pnfs_layout_segment *wlseg;
  	struct pnfs_layout_segment *clseg;
  };
  
  struct pnfs_ds_commit_info {
  	int nwritten;
  	int ncommitting;
  	int nbuckets;
  	struct pnfs_commit_bucket *buckets;
  };
99fe60d06   Benny Halevy   nfs41: exchange_i...
1046
1047
1048
1049
1050
1051
1052
1053
  #define NFS4_EXCHANGE_ID_LEN	(48)
  struct nfs41_exchange_id_args {
  	struct nfs_client		*client;
  	nfs4_verifier			*verifier;
  	unsigned int 			id_len;
  	char 				id[NFS4_EXCHANGE_ID_LEN];
  	u32				flags;
  };
acdeb69d9   Chuck Lever   NFS: EXCHANGE_ID ...
1054
  struct nfs41_server_owner {
99fe60d06   Benny Halevy   nfs41: exchange_i...
1055
1056
1057
1058
  	uint64_t			minor_id;
  	uint32_t			major_id_sz;
  	char				major_id[NFS4_OPAQUE_LIMIT];
  };
79d4e1f0d   Chuck Lever   NFS: Use proper n...
1059
  struct nfs41_server_scope {
99fe60d06   Benny Halevy   nfs41: exchange_i...
1060
1061
1062
  	uint32_t			server_scope_sz;
  	char 				server_scope[NFS4_OPAQUE_LIMIT];
  };
7d2ed9ac2   Weston Andros Adamson   NFSv4: parse and ...
1063
1064
1065
1066
1067
  struct nfs41_impl_id {
  	char				domain[NFS4_OPAQUE_LIMIT + 1];
  	char				name[NFS4_OPAQUE_LIMIT + 1];
  	struct nfstime4			date;
  };
7c44f1ae4   Weston Andros Adamson   nfs4.1: add BIND_...
1068
1069
1070
1071
1072
  struct nfs41_bind_conn_to_session_res {
  	struct nfs4_session		*session;
  	u32				dir;
  	bool				use_conn_in_rdma_mode;
  };
99fe60d06   Benny Halevy   nfs41: exchange_i...
1073
  struct nfs41_exchange_id_res {
32b013106   Trond Myklebust   NFSv4.1: Don't cl...
1074
1075
  	u64				clientid;
  	u32				seqid;
99fe60d06   Benny Halevy   nfs41: exchange_i...
1076
  	u32				flags;
acdeb69d9   Chuck Lever   NFS: EXCHANGE_ID ...
1077
  	struct nfs41_server_owner	*server_owner;
79d4e1f0d   Chuck Lever   NFS: Use proper n...
1078
  	struct nfs41_server_scope	*server_scope;
7d2ed9ac2   Weston Andros Adamson   NFSv4: parse and ...
1079
  	struct nfs41_impl_id		*impl_id;
99fe60d06   Benny Halevy   nfs41: exchange_i...
1080
  };
fc931582c   Andy Adamson   nfs41: create_ses...
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
  
  struct nfs41_create_session_args {
  	struct nfs_client	       *client;
  	uint32_t			flags;
  	uint32_t			cb_program;
  	struct nfs4_channel_attrs	fc_attrs;	/* Fore Channel */
  	struct nfs4_channel_attrs	bc_attrs;	/* Back Channel */
  };
  
  struct nfs41_create_session_res {
  	struct nfs_client	       *client;
  };
180197536   Ricardo Labiaga   nfs41: RECLAIM_CO...
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
  
  struct nfs41_reclaim_complete_args {
  	/* In the future extend to include curr_fh for use with migration */
  	unsigned char			one_fs:1;
  	struct nfs4_sequence_args	seq_args;
  };
  
  struct nfs41_reclaim_complete_res {
  	struct nfs4_sequence_res	seq_res;
  };
fca78d6d2   Bryan Schumaker   NFS: Add SECINFO_...
1103
1104
1105
1106
1107
1108
1109
  
  #define SECINFO_STYLE_CURRENT_FH 0
  #define SECINFO_STYLE_PARENT 1
  struct nfs41_secinfo_no_name_args {
  	int				style;
  	struct nfs4_sequence_args	seq_args;
  };
7d9747947   Bryan Schumaker   NFS: Added TEST_S...
1110
1111
1112
1113
1114
1115
1116
1117
1118
  struct nfs41_test_stateid_args {
  	nfs4_stateid			*stateid;
  	struct nfs4_sequence_args	seq_args;
  };
  
  struct nfs41_test_stateid_res {
  	unsigned int			status;
  	struct nfs4_sequence_res	seq_res;
  };
9aeda35fd   Bryan Schumaker   NFS: added FREE_S...
1119
1120
1121
1122
1123
1124
1125
1126
1127
  struct nfs41_free_stateid_args {
  	nfs4_stateid			*stateid;
  	struct nfs4_sequence_args	seq_args;
  };
  
  struct nfs41_free_stateid_res {
  	unsigned int			status;
  	struct nfs4_sequence_res	seq_res;
  };
4f97615d1   Trond Myklebust   NFS: Fix a compil...
1128
1129
1130
1131
  #else
  
  struct pnfs_ds_commit_info {
  };
99fe60d06   Benny Halevy   nfs41: exchange_i...
1132
  #endif /* CONFIG_NFS_V4_1 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1133
  struct nfs_page;
40859d7ee   Chuck Lever   NFS: support larg...
1134
  #define NFS_PAGEVEC_SIZE	(8U)
30dd374f6   Fred Isaman   NFS: create struc...
1135
1136
1137
1138
1139
  struct nfs_page_array {
  	struct page		**pagevec;
  	unsigned int		npages;		/* Max length of pagevec */
  	struct page		*page_array[NFS_PAGEVEC_SIZE];
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1140
  struct nfs_read_data {
cd841605f   Fred Isaman   NFS: create commo...
1141
1142
  	struct nfs_pgio_header	*header;
  	struct list_head	list;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1143
  	struct rpc_task		task;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1144
  	struct nfs_fattr	fattr;	/* fattr storage */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1145
1146
  	struct nfs_readargs args;
  	struct nfs_readres  res;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1147
  	unsigned long		timestamp;	/* For lease renewal */
cbdabc7f8   Andy Adamson   NFSv4.1: filelayo...
1148
  	int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data);
dc70d7b31   Andy Adamson   NFSv4.1: filelayo...
1149
  	__u64			mds_offset;
30dd374f6   Fred Isaman   NFS: create struc...
1150
  	struct nfs_page_array	pages;
cd841605f   Fred Isaman   NFS: create commo...
1151
1152
  	struct nfs_client	*ds_clp;	/* pNFS data server */
  };
4db6e0b74   Fred Isaman   NFS: merge _full ...
1153
1154
1155
1156
1157
  /* used as flag bits in nfs_pgio_header */
  enum {
  	NFS_IOHDR_ERROR = 0,
  	NFS_IOHDR_EOF,
  	NFS_IOHDR_REDO,
6c75dc0d4   Fred Isaman   NFS: merge _full ...
1158
1159
  	NFS_IOHDR_NEED_COMMIT,
  	NFS_IOHDR_NEED_RESCHED,
4db6e0b74   Fred Isaman   NFS: merge _full ...
1160
  };
cd841605f   Fred Isaman   NFS: create commo...
1161
1162
1163
1164
  struct nfs_pgio_header {
  	struct inode		*inode;
  	struct rpc_cred		*cred;
  	struct list_head	pages;
4db6e0b74   Fred Isaman   NFS: merge _full ...
1165
1166
  	struct list_head	rpc_list;
  	atomic_t		refcnt;
cd841605f   Fred Isaman   NFS: create commo...
1167
  	struct nfs_page		*req;
9bce008ba   Trond Myklebust   NFS: Fix a commit...
1168
  	struct nfs_writeverf	*verf;
cd841605f   Fred Isaman   NFS: create commo...
1169
  	struct pnfs_layout_segment *lseg;
4db6e0b74   Fred Isaman   NFS: merge _full ...
1170
  	loff_t			io_start;
cd841605f   Fred Isaman   NFS: create commo...
1171
  	const struct rpc_call_ops *mds_ops;
4db6e0b74   Fred Isaman   NFS: merge _full ...
1172
  	void (*release) (struct nfs_pgio_header *hdr);
061ae2edb   Fred Isaman   NFS: create compl...
1173
  	const struct nfs_pgio_completion_ops *completion_ops;
584aa810b   Fred Isaman   NFS: rewrite dire...
1174
  	struct nfs_direct_req	*dreq;
4db6e0b74   Fred Isaman   NFS: merge _full ...
1175
1176
  	spinlock_t		lock;
  	/* fields protected by lock */
cd841605f   Fred Isaman   NFS: create commo...
1177
  	int			pnfs_error;
4db6e0b74   Fred Isaman   NFS: merge _full ...
1178
1179
1180
  	int			error;		/* merge with pnfs_error */
  	unsigned long		good_bytes;	/* boundary of good data */
  	unsigned long		flags;
cd841605f   Fred Isaman   NFS: create commo...
1181
1182
1183
1184
1185
  };
  
  struct nfs_read_header {
  	struct nfs_pgio_header	header;
  	struct nfs_read_data	rpc_data;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1186
1187
1188
  };
  
  struct nfs_write_data {
cd841605f   Fred Isaman   NFS: create commo...
1189
1190
  	struct nfs_pgio_header	*header;
  	struct list_head	list;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1191
  	struct rpc_task		task;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1192
1193
  	struct nfs_fattr	fattr;
  	struct nfs_writeverf	verf;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1194
1195
  	struct nfs_writeargs	args;		/* argument struct */
  	struct nfs_writeres	res;		/* result struct */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1196
  	unsigned long		timestamp;	/* For lease renewal */
cd841605f   Fred Isaman   NFS: create commo...
1197
  	int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data);
a69aef149   Fred Isaman   NFSv4.1: pnfs fil...
1198
  	__u64			mds_offset;	/* Filelayout dense stripe */
30dd374f6   Fred Isaman   NFS: create struc...
1199
  	struct nfs_page_array	pages;
cd841605f   Fred Isaman   NFS: create commo...
1200
1201
1202
1203
1204
1205
  	struct nfs_client	*ds_clp;	/* pNFS data server */
  };
  
  struct nfs_write_header {
  	struct nfs_pgio_header	header;
  	struct nfs_write_data	rpc_data;
9bce008ba   Trond Myklebust   NFS: Fix a commit...
1206
  	struct nfs_writeverf	verf;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1207
  };
ea2cf2282   Fred Isaman   NFS: create struc...
1208
1209
1210
1211
1212
  struct nfs_mds_commit_info {
  	atomic_t rpcs_out;
  	unsigned long		ncommit;
  	struct list_head	list;
  };
f453a54a0   Fred Isaman   NFS: create nfs_c...
1213
1214
1215
1216
1217
1218
  struct nfs_commit_data;
  struct nfs_inode;
  struct nfs_commit_completion_ops {
  	void (*error_cleanup) (struct nfs_inode *nfsi);
  	void (*completion) (struct nfs_commit_data *data);
  };
ea2cf2282   Fred Isaman   NFS: create struc...
1219
1220
1221
1222
  struct nfs_commit_info {
  	spinlock_t			*lock;
  	struct nfs_mds_commit_info	*mds;
  	struct pnfs_ds_commit_info	*ds;
b359f9d09   Fred Isaman   NFS: add dreq to ...
1223
  	struct nfs_direct_req		*dreq;	/* O_DIRECT request */
f453a54a0   Fred Isaman   NFS: create nfs_c...
1224
  	const struct nfs_commit_completion_ops *completion_ops;
ea2cf2282   Fred Isaman   NFS: create struc...
1225
  };
0b7c01533   Fred Isaman   NFS: add a struct...
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
  struct nfs_commit_data {
  	struct rpc_task		task;
  	struct inode		*inode;
  	struct rpc_cred		*cred;
  	struct nfs_fattr	fattr;
  	struct nfs_writeverf	verf;
  	struct list_head	pages;		/* Coalesced requests we wish to flush */
  	struct list_head	list;		/* lists of struct nfs_write_data */
  	struct nfs_direct_req	*dreq;		/* O_DIRECT request */
  	struct nfs_commitargs	args;		/* argument struct */
  	struct nfs_commitres	res;		/* result struct */
  	struct nfs_open_context *context;
  	struct pnfs_layout_segment *lseg;
  	struct nfs_client	*ds_clp;	/* pNFS data server */
  	int			ds_commit_index;
  	const struct rpc_call_ops *mds_ops;
f453a54a0   Fred Isaman   NFS: create nfs_c...
1242
  	const struct nfs_commit_completion_ops *completion_ops;
0b7c01533   Fred Isaman   NFS: add a struct...
1243
1244
  	int (*commit_done_cb) (struct rpc_task *task, struct nfs_commit_data *data);
  };
061ae2edb   Fred Isaman   NFS: create compl...
1245
1246
  struct nfs_pgio_completion_ops {
  	void	(*error_cleanup)(struct list_head *head);
584aa810b   Fred Isaman   NFS: rewrite dire...
1247
  	void	(*init_hdr)(struct nfs_pgio_header *hdr);
061ae2edb   Fred Isaman   NFS: create compl...
1248
1249
  	void	(*completion)(struct nfs_pgio_header *hdr);
  };
34e137cc7   Bryan Schumaker   NFS: Remove nfs4_...
1250
1251
1252
1253
1254
1255
1256
1257
  struct nfs_unlinkdata {
  	struct hlist_node list;
  	struct nfs_removeargs args;
  	struct nfs_removeres res;
  	struct inode *dir;
  	struct rpc_cred	*cred;
  	struct nfs_fattr dir_attr;
  };
c6bfa1a16   Bryan Schumaker   NFS: Remove nfs4_...
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
  struct nfs_renamedata {
  	struct nfs_renameargs	args;
  	struct nfs_renameres	res;
  	struct rpc_cred		*cred;
  	struct inode		*old_dir;
  	struct dentry		*old_dentry;
  	struct nfs_fattr	old_fattr;
  	struct inode		*new_dir;
  	struct dentry		*new_dentry;
  	struct nfs_fattr	new_fattr;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1269
  struct nfs_access_entry;
45a52a020   Andy Adamson   NFS move nfs_clie...
1270
  struct nfs_client;
e0dca7a05   Trond Myklebust   NFS: Fix a warnin...
1271
  struct rpc_timeout;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1272
1273
1274
1275
1276
  
  /*
   * RPC procedure vector for NFSv2/NFSv3 demuxing
   */
  struct nfs_rpc_ops {
c0e07cb68   Chuck Lever   NFS: NFS version ...
1277
  	u32	version;		/* Protocol version */
f786aa90e   Al Viro   constify dentry_o...
1278
  	const struct dentry_operations *dentry_ops;
c5ef1c42c   Arjan van de Ven   [PATCH] mark stru...
1279
1280
  	const struct inode_operations *dir_inode_ops;
  	const struct inode_operations *file_inode_ops;
1788ea6e3   Jeff Layton   nfs: when attempt...
1281
  	const struct file_operations *file_ops;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1282
1283
1284
  
  	int	(*getroot) (struct nfs_server *, struct nfs_fh *,
  			    struct nfs_fsinfo *);
281cad46b   Bryan Schumaker   NFS: Create a sub...
1285
1286
  	struct vfsmount *(*submount) (struct nfs_server *, struct dentry *,
  				      struct nfs_fh *, struct nfs_fattr *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1287
1288
1289
1290
  	int	(*getattr) (struct nfs_server *, struct nfs_fh *,
  			    struct nfs_fattr *);
  	int	(*setattr) (struct dentry *, struct nfs_fattr *,
  			    struct iattr *);
80a16b21a   Bryan Schumaker   NFS: Remove extra...
1291
  	int	(*lookup)  (struct inode *, struct qstr *,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1292
1293
1294
1295
  			    struct nfs_fh *, struct nfs_fattr *);
  	int	(*access)  (struct inode *, struct nfs_access_entry *);
  	int	(*readlink)(struct inode *, struct page *, unsigned int,
  			    unsigned int);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1296
  	int	(*create)  (struct inode *, struct dentry *,
c0204fd2b   Trond Myklebust   NFS: Clean up nfs...
1297
  			    struct iattr *, int, struct nfs_open_context *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1298
  	int	(*remove)  (struct inode *, struct qstr *);
e4eff1a62   Trond Myklebust   SUNRPC: Clean up ...
1299
  	void	(*unlink_setup)  (struct rpc_message *, struct inode *dir);
34e137cc7   Bryan Schumaker   NFS: Remove nfs4_...
1300
  	void	(*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *);
e4eff1a62   Trond Myklebust   SUNRPC: Clean up ...
1301
  	int	(*unlink_done) (struct rpc_task *, struct inode *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1302
1303
  	int	(*rename)  (struct inode *, struct qstr *,
  			    struct inode *, struct qstr *);
d3d4152a5   Jeff Layton   nfs: make sillyre...
1304
  	void	(*rename_setup)  (struct rpc_message *msg, struct inode *dir);
c6bfa1a16   Bryan Schumaker   NFS: Remove nfs4_...
1305
  	void	(*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *);
d3d4152a5   Jeff Layton   nfs: make sillyre...
1306
  	int	(*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1307
  	int	(*link)    (struct inode *, struct inode *, struct qstr *);
94a6d7532   Chuck Lever   NFS: Use cached p...
1308
1309
  	int	(*symlink) (struct inode *, struct dentry *, struct page *,
  			    unsigned int, struct iattr *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1310
1311
1312
  	int	(*mkdir)   (struct inode *, struct dentry *, struct iattr *);
  	int	(*rmdir)   (struct inode *, struct qstr *);
  	int	(*readdir) (struct dentry *, struct rpc_cred *,
56e4ebf87   Bryan Schumaker   NFS: readdir with...
1313
  			    u64, struct page **, unsigned int, int);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1314
1315
1316
1317
1318
1319
1320
1321
  	int	(*mknod)   (struct inode *, struct dentry *, struct iattr *,
  			    dev_t);
  	int	(*statfs)  (struct nfs_server *, struct nfs_fh *,
  			    struct nfs_fsstat *);
  	int	(*fsinfo)  (struct nfs_server *, struct nfs_fh *,
  			    struct nfs_fsinfo *);
  	int	(*pathconf) (struct nfs_server *, struct nfs_fh *,
  			     struct nfs_pathconf *);
e9326dcab   David Howells   NFS: Add a server...
1322
  	int	(*set_capabilities)(struct nfs_server *, struct nfs_fh *);
573c4e1ef   Chuck Lever   NFS: Simplify ->d...
1323
  	int	(*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
bdc7f021f   Trond Myklebust   NFS: Clean up the...
1324
  	void	(*read_setup)   (struct nfs_read_data *, struct rpc_message *);
ea7c33036   Bryan Schumaker   NFS: Remove nfs4_...
1325
  	void	(*read_rpc_prepare)(struct rpc_task *, struct nfs_read_data *);
ec06c096e   Trond Myklebust   NFS: Cleanup of N...
1326
  	int	(*read_done)  (struct rpc_task *, struct nfs_read_data *);
bdc7f021f   Trond Myklebust   NFS: Clean up the...
1327
  	void	(*write_setup)  (struct nfs_write_data *, struct rpc_message *);
c6cb80d00   Bryan Schumaker   NFS: Remove nfs4_...
1328
  	void	(*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *);
788e7a89a   Trond Myklebust   NFS: Cleanup of N...
1329
  	int	(*write_done)  (struct rpc_task *, struct nfs_write_data *);
0b7c01533   Fred Isaman   NFS: add a struct...
1330
1331
1332
  	void	(*commit_setup) (struct nfs_commit_data *, struct rpc_message *);
  	void	(*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
  	int	(*commit_done) (struct rpc_task *, struct nfs_commit_data *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1333
  	int	(*lock)(struct file *, int, struct file_lock *);
2116271a3   Trond Myklebust   NFS: Add correct ...
1334
  	int	(*lock_check_bounds)(const struct file_lock *);
ada70d942   Trond Myklebust   [PATCH] NFS: Add ...
1335
  	void	(*clear_acl_cache)(struct inode *);
7fe5c398f   Trond Myklebust   NFS: Optimise NFS...
1336
  	void	(*close_context)(struct nfs_open_context *ctx, int);
2b484297e   Trond Myklebust   NFS: Add an 'open...
1337
1338
1339
1340
  	struct inode * (*open_context) (struct inode *dir,
  				struct nfs_open_context *ctx,
  				int open_flags,
  				struct iattr *iattr);
8cab4c390   Chuck Lever   NFS: Refactor nfs...
1341
1342
  	struct nfs_client *
  		(*init_client) (struct nfs_client *, const struct rpc_timeout *,
4bf590e08   Chuck Lever   NFS: Add nfs_clie...
1343
  				const char *, rpc_authflavor_t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
  };
  
  /*
   * 	NFS_CALL(getattr, inode, (fattr));
   * into
   *	NFS_PROTO(inode)->getattr(fattr);
   */
  #define NFS_CALL(op, inode, args)	NFS_PROTO(inode)->op args
  
  /*
   * Function vectors etc. for the NFS client
   */
509de8111   David Howells   NFS: Add extra co...
1356
1357
1358
  extern const struct nfs_rpc_ops	nfs_v2_clientops;
  extern const struct nfs_rpc_ops	nfs_v3_clientops;
  extern const struct nfs_rpc_ops	nfs_v4_clientops;
a613fa168   Trond Myklebust   SUNRPC: constify ...
1359
1360
1361
  extern const struct rpc_version nfs_version2;
  extern const struct rpc_version nfs_version3;
  extern const struct rpc_version nfs_version4;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1362

a613fa168   Trond Myklebust   SUNRPC: constify ...
1363
1364
  extern const struct rpc_version nfsacl_version3;
  extern const struct rpc_program nfsacl_program;
b7fa0554c   Andreas Gruenbacher   [PATCH] NFS: Add ...
1365

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1366
  #endif