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