Blame view

fs/nfsd/xdr4.h 17.7 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
   *  Server-side types for NFSv4.
   *
   *  Copyright (c) 2002 The Regents of the University of Michigan.
   *  All rights reserved.
   *
   *  Kendrick Smith <kmsmith@umich.edu>
   *  Andy Adamson   <andros@umich.edu>
   *
   *  Redistribution and use in source and binary forms, with or without
   *  modification, are permitted provided that the following conditions
   *  are met:
   *
   *  1. Redistributions of source code must retain the above copyright
   *     notice, this list of conditions and the following disclaimer.
   *  2. Redistributions in binary form must reproduce the above copyright
   *     notice, this list of conditions and the following disclaimer in the
   *     documentation and/or other materials provided with the distribution.
   *  3. Neither the name of the University nor the names of its
   *     contributors may be used to endorse or promote products derived
   *     from this software without specific prior written permission.
   *
   *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
   *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
   *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   */
  
  #ifndef _LINUX_NFSD_XDR4_H
  #define _LINUX_NFSD_XDR4_H
9a74af213   Boaz Harrosh   nfsd: Move privat...
39
40
  #include "state.h"
  #include "nfsd.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41
42
43
  
  #define NFSD4_MAX_TAGLEN	128
  #define XDR_LEN(n)                     (((n) + 3) & ~3)
ca3643171   J.Bruce Fields   [PATCH] knfsd: nf...
44
  struct nfsd4_compound_state {
e354d571b   Andy Adamson   nfsd: embed nfsd4...
45
46
47
  	struct svc_fh		current_fh;
  	struct svc_fh		save_fh;
  	struct nfs4_stateowner	*replay_owner;
b85d4c01b   Benny Halevy   nfsd41: sequence ...
48
49
50
  	/* For sessions DRC */
  	struct nfsd4_session	*session;
  	struct nfsd4_slot	*slot;
557ce2646   Andy Adamson   nfsd41: replace p...
51
  	__be32			*datap;
da3846a28   Andy Adamson   nfsd41: nfsd DRC ...
52
  	size_t			iovlen;
d87a8ade9   Andy Adamson   nfsd41: access_valid
53
  	u32			minorversion;
074fe8975   Andy Adamson   nfsd41: DRC save,...
54
  	u32			status;
ca3643171   J.Bruce Fields   [PATCH] knfsd: nf...
55
  };
6668958fa   Andy Adamson   nfsd41: stateid h...
56
57
58
59
  static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
  {
  	return cs->slot != NULL;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
  struct nfsd4_change_info {
  	u32		atomic;
c654b8a9c   J. Bruce Fields   nfsd: support ext...
62
  	bool		change_supported;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
64
  	u32		before_ctime_sec;
  	u32		before_ctime_nsec;
c654b8a9c   J. Bruce Fields   nfsd: support ext...
65
  	u64		before_change;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66
67
  	u32		after_ctime_sec;
  	u32		after_ctime_nsec;
c654b8a9c   J. Bruce Fields   nfsd: support ext...
68
  	u64		after_change;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
69
70
71
72
73
74
75
76
77
78
79
  };
  
  struct nfsd4_access {
  	u32		ac_req_access;      /* request */
  	u32		ac_supported;       /* response */
  	u32		ac_resp_access;     /* response */
  };
  
  struct nfsd4_close {
  	u32		cl_seqid;           /* request */
  	stateid_t	cl_stateid;         /* request+response */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  };
  
  struct nfsd4_commit {
  	u64		co_offset;          /* request */
  	u32		co_count;           /* request */
  	nfs4_verifier	co_verf;            /* response */
  };
  
  struct nfsd4_create {
  	u32		cr_namelen;         /* request */
  	char *		cr_name;            /* request */
  	u32		cr_type;            /* request */
  	union {                             /* request */
  		struct {
  			u32 namelen;
  			char *name;
  		} link;   /* NF4LNK */
  		struct {
  			u32 specdata1;
  			u32 specdata2;
  		} dev;    /* NF4BLK, NF4CHR */
  	} u;
7e7057064   Andy Adamson   nfsd41: support f...
102
  	u32		cr_bmval[3];        /* request */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
105
106
107
108
109
110
111
112
113
114
115
116
  	struct iattr	cr_iattr;           /* request */
  	struct nfsd4_change_info  cr_cinfo; /* response */
  	struct nfs4_acl *cr_acl;
  };
  #define cr_linklen	u.link.namelen
  #define cr_linkname	u.link.name
  #define cr_specdata1	u.dev.specdata1
  #define cr_specdata2	u.dev.specdata2
  
  struct nfsd4_delegreturn {
  	stateid_t	dr_stateid;
  };
  
  struct nfsd4_getattr {
7e7057064   Andy Adamson   nfsd41: support f...
117
  	u32		ga_bmval[3];        /* request */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118
119
120
121
122
123
124
125
126
127
128
  	struct svc_fh	*ga_fhp;            /* response */
  };
  
  struct nfsd4_link {
  	u32		li_namelen;         /* request */
  	char *		li_name;            /* request */
  	struct nfsd4_change_info  li_cinfo; /* response */
  };
  
  struct nfsd4_lock_denied {
  	clientid_t	ld_clientid;
7c13f344c   J. Bruce Fields   nfsd4: drop most ...
129
  	struct xdr_netobj	ld_owner;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
130
131
132
133
134
135
136
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
  	u64             ld_start;
  	u64             ld_length;
  	u32             ld_type;
  };
  
  struct nfsd4_lock {
  	/* request */
  	u32             lk_type;
  	u32             lk_reclaim;         /* boolean */
  	u64             lk_offset;
  	u64             lk_length;
  	u32             lk_is_new;
  	union {
  		struct {
  			u32             open_seqid;
  			stateid_t       open_stateid;
  			u32             lock_seqid;
  			clientid_t      clientid;
  			struct xdr_netobj owner;
  		} new;
  		struct {
  			stateid_t       lock_stateid;
  			u32             lock_seqid;
  		} old;
  	} v;
  
  	/* response */
  	union {
  		struct {
  			stateid_t               stateid;
  		} ok;
  		struct nfsd4_lock_denied        denied;
  	} u;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
  };
  #define lk_new_open_seqid       v.new.open_seqid
  #define lk_new_open_stateid     v.new.open_stateid
  #define lk_new_lock_seqid       v.new.lock_seqid
  #define lk_new_clientid         v.new.clientid
  #define lk_new_owner            v.new.owner
  #define lk_old_lock_stateid     v.old.lock_stateid
  #define lk_old_lock_seqid       v.old.lock_seqid
  
  #define lk_rflags       u.ok.rflags
  #define lk_resp_stateid u.ok.stateid
  #define lk_denied       u.denied
  
  
  struct nfsd4_lockt {
  	u32				lt_type;
  	clientid_t			lt_clientid;
  	struct xdr_netobj		lt_owner;
  	u64				lt_offset;
  	u64				lt_length;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183
184
185
186
187
188
189
190
191
192
  	struct nfsd4_lock_denied  	lt_denied;
  };
  
   
  struct nfsd4_locku {
  	u32             lu_type;
  	u32             lu_seqid;
  	stateid_t       lu_stateid;
  	u64             lu_offset;
  	u64             lu_length;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
  };
  
  
  struct nfsd4_lookup {
  	u32		lo_len;             /* request */
  	char *		lo_name;            /* request */
  };
  
  struct nfsd4_putfh {
  	u32		pf_fhlen;           /* request */
  	char		*pf_fhval;          /* request */
  };
  
  struct nfsd4_open {
  	u32		op_claim_type;      /* request */
  	struct xdr_netobj op_fname;	    /* request - everything but CLAIM_PREV */
  	u32		op_delegate_type;   /* request - CLAIM_PREV only */
  	stateid_t       op_delegate_stateid; /* request - response */
  	u32		op_create;     	    /* request */
  	u32		op_createmode;      /* request */
7e7057064   Andy Adamson   nfsd41: support f...
213
  	u32		op_bmval[3];        /* request */
79fb54abd   Benny Halevy   nfsd41: CREATE_EX...
214
215
  	struct iattr	iattr;              /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */
  	nfs4_verifier	verf;               /* EXCLUSIVE4 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
216
217
218
219
220
221
  	clientid_t	op_clientid;        /* request */
  	struct xdr_netobj op_owner;           /* request */
  	u32		op_seqid;           /* request */
  	u32		op_share_access;    /* request */
  	u32		op_share_deny;      /* request */
  	stateid_t	op_stateid;         /* response */
7b190fecf   NeilBrown   [PATCH] knfsd: nf...
222
  	u32		op_recall;          /* recall */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
223
224
  	struct nfsd4_change_info  op_cinfo; /* response */
  	u32		op_rflags;          /* response */
856121b2e   J. Bruce Fields   nfsd4: warn on op...
225
226
  	bool		op_truncate;        /* used during processing */
  	bool		op_created;         /* used during processing */
fe0750e5c   J. Bruce Fields   nfsd4: split stat...
227
  	struct nfs4_openowner *op_openowner; /* used during processing */
32513b40e   J. Bruce Fields   nfsd4: preallocat...
228
  	struct nfs4_file *op_file;          /* used during processing */
4cdc951b8   J. Bruce Fields   nfsd4: preallocat...
229
  	struct nfs4_ol_stateid *op_stp;	    /* used during processing */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
230
231
  	struct nfs4_acl *op_acl;
  };
79fb54abd   Benny Halevy   nfsd41: CREATE_EX...
232
233
  #define op_iattr	iattr
  #define op_verf		verf
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
234
235
236
237
238
  
  struct nfsd4_open_confirm {
  	stateid_t	oc_req_stateid		/* request */;
  	u32		oc_seqid    		/* request */;
  	stateid_t	oc_resp_stateid		/* response */;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
239
240
241
242
243
244
245
  };
  
  struct nfsd4_open_downgrade {
  	stateid_t       od_stateid;
  	u32             od_seqid;
  	u32             od_share_access;
  	u32             od_share_deny;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
246
247
248
249
250
251
252
  };
  
  
  struct nfsd4_read {
  	stateid_t	rd_stateid;         /* request */
  	u64		rd_offset;          /* request */
  	u32		rd_length;          /* request */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
253
254
255
256
257
258
259
260
261
262
263
264
  	int		rd_vlen;
  	struct file     *rd_filp;
  	
  	struct svc_rqst *rd_rqstp;          /* response */
  	struct svc_fh * rd_fhp;             /* response */
  };
  
  struct nfsd4_readdir {
  	u64		rd_cookie;          /* request */
  	nfs4_verifier	rd_verf;            /* request */
  	u32		rd_dircount;        /* request */
  	u32		rd_maxcount;        /* request */
7e7057064   Andy Adamson   nfsd41: support f...
265
  	u32		rd_bmval[3];        /* request */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
266
267
268
269
  	struct svc_rqst *rd_rqstp;          /* response */
  	struct svc_fh * rd_fhp;             /* response */
  
  	struct readdir_cd	common;
2ebbc012a   Al Viro   [PATCH] xdr annot...
270
  	__be32 *		buffer;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
271
  	int			buflen;
2ebbc012a   Al Viro   [PATCH] xdr annot...
272
  	__be32 *		offset;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
  };
  
  struct nfsd4_release_lockowner {
  	clientid_t        rl_clientid;
  	struct xdr_netobj rl_owner;
  };
  struct nfsd4_readlink {
  	struct svc_rqst *rl_rqstp;          /* request */
  	struct svc_fh *	rl_fhp;             /* request */
  };
  
  struct nfsd4_remove {
  	u32		rm_namelen;         /* request */
  	char *		rm_name;            /* request */
  	struct nfsd4_change_info  rm_cinfo; /* response */
  };
  
  struct nfsd4_rename {
  	u32		rn_snamelen;        /* request */
  	char *		rn_sname;           /* request */
  	u32		rn_tnamelen;        /* request */
  	char *		rn_tname;           /* request */
  	struct nfsd4_change_info  rn_sinfo; /* response */
  	struct nfsd4_change_info  rn_tinfo; /* response */
  };
dcb488a3b   Andy Adamson   knfsd: nfsd4: imp...
298
299
300
301
302
  struct nfsd4_secinfo {
  	u32 si_namelen;					/* request */
  	char *si_name;					/* request */
  	struct svc_export *si_exp;			/* response */
  };
04f4ad16b   J. Bruce Fields   nfsd4: implement ...
303
304
305
306
  struct nfsd4_secinfo_no_name {
  	u32 sin_style;					/* request */
  	struct svc_export *sin_exp;			/* response */
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
307
308
  struct nfsd4_setattr {
  	stateid_t	sa_stateid;         /* request */
7e7057064   Andy Adamson   nfsd41: support f...
309
  	u32		sa_bmval[3];        /* request */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
310
311
312
313
314
315
  	struct iattr	sa_iattr;           /* request */
  	struct nfs4_acl *sa_acl;
  };
  
  struct nfsd4_setclientid {
  	nfs4_verifier	se_verf;            /* request */
a084daf51   J. Bruce Fields   nfsd4: move name-...
316
  	struct xdr_netobj se_name;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
317
318
319
320
321
322
323
324
325
326
327
328
329
330
  	u32		se_callback_prog;   /* request */
  	u32		se_callback_netid_len;  /* request */
  	char *		se_callback_netid_val;  /* request */
  	u32		se_callback_addr_len;   /* request */
  	char *		se_callback_addr_val;   /* request */
  	u32		se_callback_ident;  /* request */
  	clientid_t	se_clientid;        /* response */
  	nfs4_verifier	se_confirm;         /* response */
  };
  
  struct nfsd4_setclientid_confirm {
  	clientid_t	sc_clientid;
  	nfs4_verifier	sc_confirm;
  };
174568045   Bryan Schumaker   NFSD: Added TEST_...
331
332
333
334
335
336
337
338
339
  struct nfsd4_saved_compoundargs {
  	__be32 *p;
  	__be32 *end;
  	int pagelen;
  	struct page **pagelist;
  };
  
  struct nfsd4_test_stateid {
  	__be32		ts_num_ids;
174568045   Bryan Schumaker   NFSD: Added TEST_...
340
341
342
  	struct nfsd4_compoundargs *ts_saved_args;
  	struct nfsd4_saved_compoundargs ts_savedp;
  };
e1ca12dfb   Bryan Schumaker   NFSD: added FREE_...
343
344
345
346
  struct nfsd4_free_stateid {
  	stateid_t	fr_stateid;         /* request */
  	__be32		fr_status;          /* response */
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
347
348
  /* also used for NVERIFY */
  struct nfsd4_verify {
7e7057064   Andy Adamson   nfsd41: support f...
349
  	u32		ve_bmval[3];        /* request */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
350
351
352
353
354
355
356
357
358
  	u32		ve_attrlen;         /* request */
  	char *		ve_attrval;         /* request */
  };
  
  struct nfsd4_write {
  	stateid_t	wr_stateid;         /* request */
  	u64		wr_offset;          /* request */
  	u32		wr_stable_how;      /* request */
  	u32		wr_buflen;          /* request */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
359
360
361
362
363
364
  	int		wr_vlen;
  
  	u32		wr_bytes_written;   /* response */
  	u32		wr_how_written;     /* response */
  	nfs4_verifier	wr_verifier;        /* response */
  };
2db134eb3   Andy Adamson   nfsd41: xdr infra...
365
  struct nfsd4_exchange_id {
0733d2133   Andy Adamson   nfsd41: exchange_...
366
367
368
369
370
371
  	nfs4_verifier	verifier;
  	struct xdr_netobj clname;
  	u32		flags;
  	clientid_t	clientid;
  	u32		seqid;
  	int		spa_how;
2db134eb3   Andy Adamson   nfsd41: xdr infra...
372
  };
2db134eb3   Andy Adamson   nfsd41: xdr infra...
373
  struct nfsd4_sequence {
b85d4c01b   Benny Halevy   nfsd41: sequence ...
374
375
376
377
378
379
380
  	struct nfs4_sessionid	sessionid;		/* request/response */
  	u32			seqid;			/* request/response */
  	u32			slotid;			/* request/response */
  	u32			maxslots;		/* request/response */
  	u32			cachethis;		/* request */
  #if 0
  	u32			target_maxslots;	/* response */
b85d4c01b   Benny Halevy   nfsd41: sequence ...
381
  #endif /* not yet */
0d7bb7190   J. Bruce Fields   nfsd4: set sequen...
382
  	u32			status_flags;		/* response */
2db134eb3   Andy Adamson   nfsd41: xdr infra...
383
384
385
  };
  
  struct nfsd4_destroy_session {
e10e0cfc2   Benny Halevy   nfsd41: destroy_s...
386
  	struct nfs4_sessionid	sessionid;
2db134eb3   Andy Adamson   nfsd41: xdr infra...
387
  };
345c28429   Mi Jinlong   nfs41: implement ...
388
389
390
  struct nfsd4_destroy_clientid {
  	clientid_t clientid;
  };
4dc6ec00f   J. Bruce Fields   nfsd4: implement ...
391
392
393
  struct nfsd4_reclaim_complete {
  	u32 rca_one_fs;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
394
395
  struct nfsd4_op {
  	int					opnum;
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
396
  	__be32					status;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
  	union {
  		struct nfsd4_access		access;
  		struct nfsd4_close		close;
  		struct nfsd4_commit		commit;
  		struct nfsd4_create		create;
  		struct nfsd4_delegreturn	delegreturn;
  		struct nfsd4_getattr		getattr;
  		struct svc_fh *			getfh;
  		struct nfsd4_link		link;
  		struct nfsd4_lock		lock;
  		struct nfsd4_lockt		lockt;
  		struct nfsd4_locku		locku;
  		struct nfsd4_lookup		lookup;
  		struct nfsd4_verify		nverify;
  		struct nfsd4_open		open;
  		struct nfsd4_open_confirm	open_confirm;
  		struct nfsd4_open_downgrade	open_downgrade;
  		struct nfsd4_putfh		putfh;
  		struct nfsd4_read		read;
  		struct nfsd4_readdir		readdir;
  		struct nfsd4_readlink		readlink;
  		struct nfsd4_remove		remove;
  		struct nfsd4_rename		rename;
  		clientid_t			renew;
dcb488a3b   Andy Adamson   knfsd: nfsd4: imp...
421
  		struct nfsd4_secinfo		secinfo;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
422
423
424
425
426
427
  		struct nfsd4_setattr		setattr;
  		struct nfsd4_setclientid	setclientid;
  		struct nfsd4_setclientid_confirm setclientid_confirm;
  		struct nfsd4_verify		verify;
  		struct nfsd4_write		write;
  		struct nfsd4_release_lockowner	release_lockowner;
2db134eb3   Andy Adamson   nfsd41: xdr infra...
428
429
430
  
  		/* NFSv4.1 */
  		struct nfsd4_exchange_id	exchange_id;
1d1bc8f20   J. Bruce Fields   nfsd4: support BI...
431
  		struct nfsd4_bind_conn_to_session bind_conn_to_session;
2db134eb3   Andy Adamson   nfsd41: xdr infra...
432
433
434
  		struct nfsd4_create_session	create_session;
  		struct nfsd4_destroy_session	destroy_session;
  		struct nfsd4_sequence		sequence;
4dc6ec00f   J. Bruce Fields   nfsd4: implement ...
435
  		struct nfsd4_reclaim_complete	reclaim_complete;
174568045   Bryan Schumaker   NFSD: Added TEST_...
436
  		struct nfsd4_test_stateid	test_stateid;
e1ca12dfb   Bryan Schumaker   NFSD: added FREE_...
437
  		struct nfsd4_free_stateid	free_stateid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
438
439
440
  	} u;
  	struct nfs4_replay *			replay;
  };
1091006c5   J. Bruce Fields   nfsd: turn on rep...
441
  bool nfsd4_cache_this_op(struct nfsd4_op *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
442
443
  struct nfsd4_compoundargs {
  	/* scratch variables for XDR decode */
2ebbc012a   Al Viro   [PATCH] xdr annot...
444
445
  	__be32 *			p;
  	__be32 *			end;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
446
447
  	struct page **			pagelist;
  	int				pagelen;
2ebbc012a   Al Viro   [PATCH] xdr annot...
448
449
  	__be32				tmp[8];
  	__be32 *			tmpp;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
450
451
452
453
454
455
456
457
458
459
460
461
462
463
  	struct tmpbuf {
  		struct tmpbuf *next;
  		void (*release)(const void *);
  		void *buf;
  	}				*to_free;
  
  	struct svc_rqst			*rqstp;
  
  	u32				taglen;
  	char *				tag;
  	u32				minorversion;
  	u32				opcnt;
  	struct nfsd4_op			*ops;
  	struct nfsd4_op			iops[8];
1091006c5   J. Bruce Fields   nfsd: turn on rep...
464
  	int				cachetype;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
465
466
467
468
  };
  
  struct nfsd4_compoundres {
  	/* scratch variables for XDR encode */
2ebbc012a   Al Viro   [PATCH] xdr annot...
469
470
  	__be32 *			p;
  	__be32 *			end;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
471
472
473
474
475
476
  	struct xdr_buf *		xbuf;
  	struct svc_rqst *		rqstp;
  
  	u32				taglen;
  	char *				tag;
  	u32				opcnt;
e354d571b   Andy Adamson   nfsd: embed nfsd4...
477
478
  	__be32 *			tagp; /* tag, opcount encode location */
  	struct nfsd4_compound_state	cstate;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
479
  };
bf864a31d   Andy Adamson   nfsd41: non-page ...
480
481
482
  static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
  {
  	struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
468de9e54   Andy Adamson   nfsd41: expand so...
483
  	return resp->opcnt == 1 && args->ops[0].opnum == OP_SEQUENCE;
bf864a31d   Andy Adamson   nfsd41: non-page ...
484
485
486
487
  }
  
  static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
  {
557ce2646   Andy Adamson   nfsd41: replace p...
488
  	return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp);
bf864a31d   Andy Adamson   nfsd41: non-page ...
489
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
490
491
492
493
494
  #define NFS4_SVC_XDRSIZE		sizeof(struct nfsd4_compoundargs)
  
  static inline void
  set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
  {
c1ac3ffcd   Neil Brown   nfsd: Fix possibl...
495
496
  	BUG_ON(!fhp->fh_pre_saved);
  	cinfo->atomic = fhp->fh_post_saved;
c654b8a9c   J. Bruce Fields   nfsd: support ext...
497
  	cinfo->change_supported = IS_I_VERSION(fhp->fh_dentry->d_inode);
c1ac3ffcd   Neil Brown   nfsd: Fix possibl...
498
499
500
501
502
503
504
  
  	cinfo->before_change = fhp->fh_pre_change;
  	cinfo->after_change = fhp->fh_post_change;
  	cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec;
  	cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec;
  	cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec;
  	cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
505
  }
2ebbc012a   Al Viro   [PATCH] xdr annot...
506
507
  int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
  int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
508
  		struct nfsd4_compoundargs *);
2ebbc012a   Al Viro   [PATCH] xdr annot...
509
  int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
510
  		struct nfsd4_compoundres *);
58e7b33a5   Mi Jinlong   nfsd41: try to ch...
511
  int nfsd4_check_resp_size(struct nfsd4_compoundres *, u32);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
512
513
  void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *);
  void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
514
515
  __be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
  		       struct dentry *dentry, __be32 *buffer, int *countp,
406a7ea97   Frank Filz   nfsd: Allow AIX c...
516
  		       u32 *bmval, struct svc_rqst *, int ignore_crossmnt);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
517
  extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
b591480bb   J.Bruce Fields   [PATCH] knfsd: nf...
518
  		struct nfsd4_compound_state *,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
519
  		struct nfsd4_setclientid *setclid);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
520
  extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
b591480bb   J.Bruce Fields   [PATCH] knfsd: nf...
521
  		struct nfsd4_compound_state *,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
522
  		struct nfsd4_setclientid_confirm *setclientid_confirm);
074fe8975   Andy Adamson   nfsd41: DRC save,...
523
  extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp);
bf864a31d   Andy Adamson   nfsd41: non-page ...
524
525
  extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
  		struct nfsd4_sequence *seq);
069b6ad4b   Andy Adamson   nfsd41: proc stubs
526
  extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
3c4ab2aaa   J. Bruce Fields   nfsd4: indentatio...
527
  		struct nfsd4_compound_state *, struct nfsd4_exchange_id *);
1d1bc8f20   J. Bruce Fields   nfsd4: support BI...
528
  extern __be32 nfsd4_bind_conn_to_session(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_bind_conn_to_session *);
3c4ab2aaa   J. Bruce Fields   nfsd4: indentatio...
529
  extern __be32 nfsd4_create_session(struct svc_rqst *,
069b6ad4b   Andy Adamson   nfsd41: proc stubs
530
531
532
533
534
535
536
537
  		struct nfsd4_compound_state *,
  		struct nfsd4_create_session *);
  extern __be32 nfsd4_sequence(struct svc_rqst *,
  		struct nfsd4_compound_state *,
  		struct nfsd4_sequence *);
  extern __be32 nfsd4_destroy_session(struct svc_rqst *,
  		struct nfsd4_compound_state *,
  		struct nfsd4_destroy_session *);
345c28429   Mi Jinlong   nfs41: implement ...
538
  extern __be32 nfsd4_destroy_clientid(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_destroy_clientid *);
4dc6ec00f   J. Bruce Fields   nfsd4: implement ...
539
  __be32 nfsd4_reclaim_complete(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_reclaim_complete *);
6668958fa   Andy Adamson   nfsd41: stateid h...
540
541
  extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
  		struct nfsd4_open *open);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
542
  extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
543
  		struct svc_fh *current_fh, struct nfsd4_open *open);
d29b20cd5   J. Bruce Fields   nfsd4: clean up o...
544
  extern void nfsd4_cleanup_open_state(struct nfsd4_open *open, __be32 status);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
545
  extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
a4f1706a9   J.Bruce Fields   [PATCH] knfsd: nf...
546
  		struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc);
ca3643171   J.Bruce Fields   [PATCH] knfsd: nf...
547
548
  extern __be32 nfsd4_close(struct svc_rqst *rqstp,
  		struct nfsd4_compound_state *,
a4f1706a9   J.Bruce Fields   [PATCH] knfsd: nf...
549
  		struct nfsd4_close *close);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
550
  extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp,
a4f1706a9   J.Bruce Fields   [PATCH] knfsd: nf...
551
552
  		struct nfsd4_compound_state *,
  		struct nfsd4_open_downgrade *od);
ca3643171   J.Bruce Fields   [PATCH] knfsd: nf...
553
  extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *,
a4f1706a9   J.Bruce Fields   [PATCH] knfsd: nf...
554
  		struct nfsd4_lock *lock);
ca3643171   J.Bruce Fields   [PATCH] knfsd: nf...
555
556
  extern __be32 nfsd4_lockt(struct svc_rqst *rqstp,
  		struct nfsd4_compound_state *,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
557
  		struct nfsd4_lockt *lockt);
ca3643171   J.Bruce Fields   [PATCH] knfsd: nf...
558
559
  extern __be32 nfsd4_locku(struct svc_rqst *rqstp,
  		struct nfsd4_compound_state *,
a4f1706a9   J.Bruce Fields   [PATCH] knfsd: nf...
560
  		struct nfsd4_locku *locku);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
561
  extern __be32
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
562
  nfsd4_release_lockowner(struct svc_rqst *rqstp,
b591480bb   J.Bruce Fields   [PATCH] knfsd: nf...
563
  		struct nfsd4_compound_state *,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
564
  		struct nfsd4_release_lockowner *rlockowner);
3e98abffd   J. Bruce Fields   nfsd4: call nfsd4...
565
  extern int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp);
b37ad28bc   Al Viro   [PATCH] nfsd: nfs...
566
  extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp,
ca3643171   J.Bruce Fields   [PATCH] knfsd: nf...
567
  		struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr);
b591480bb   J.Bruce Fields   [PATCH] knfsd: nf...
568
569
  extern __be32 nfsd4_renew(struct svc_rqst *rqstp,
  			  struct nfsd4_compound_state *, clientid_t *clid);
174568045   Bryan Schumaker   NFSD: Added TEST_...
570
571
  extern __be32 nfsd4_test_stateid(struct svc_rqst *rqstp,
  		struct nfsd4_compound_state *, struct nfsd4_test_stateid *test_stateid);
e1ca12dfb   Bryan Schumaker   NFSD: added FREE_...
572
573
  extern __be32 nfsd4_free_stateid(struct svc_rqst *rqstp,
  		struct nfsd4_compound_state *, struct nfsd4_free_stateid *free_stateid);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
574
575
576
577
578
579
580
  #endif
  
  /*
   * Local variables:
   *  c-basic-offset: 8
   * End:
   */