diff options
Diffstat (limited to 'fs/nfsd/xdr4.h')
-rw-r--r-- | fs/nfsd/xdr4.h | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 2364747ee97d..1b3501598ab5 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h | |||
@@ -43,6 +43,13 @@ | |||
43 | #define NFSD4_MAX_TAGLEN 128 | 43 | #define NFSD4_MAX_TAGLEN 128 |
44 | #define XDR_LEN(n) (((n) + 3) & ~3) | 44 | #define XDR_LEN(n) (((n) + 3) & ~3) |
45 | 45 | ||
46 | #define CURRENT_STATE_ID_FLAG (1<<0) | ||
47 | #define SAVED_STATE_ID_FLAG (1<<1) | ||
48 | |||
49 | #define SET_STATE_ID(c, f) ((c)->sid_flags |= (f)) | ||
50 | #define HAS_STATE_ID(c, f) ((c)->sid_flags & (f)) | ||
51 | #define CLEAR_STATE_ID(c, f) ((c)->sid_flags &= ~(f)) | ||
52 | |||
46 | struct nfsd4_compound_state { | 53 | struct nfsd4_compound_state { |
47 | struct svc_fh current_fh; | 54 | struct svc_fh current_fh; |
48 | struct svc_fh save_fh; | 55 | struct svc_fh save_fh; |
@@ -54,6 +61,10 @@ struct nfsd4_compound_state { | |||
54 | size_t iovlen; | 61 | size_t iovlen; |
55 | u32 minorversion; | 62 | u32 minorversion; |
56 | u32 status; | 63 | u32 status; |
64 | stateid_t current_stateid; | ||
65 | stateid_t save_stateid; | ||
66 | /* to indicate current and saved state id presents */ | ||
67 | u32 sid_flags; | ||
57 | }; | 68 | }; |
58 | 69 | ||
59 | static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs) | 70 | static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs) |
@@ -212,16 +223,19 @@ struct nfsd4_open { | |||
212 | struct xdr_netobj op_fname; /* request - everything but CLAIM_PREV */ | 223 | struct xdr_netobj op_fname; /* request - everything but CLAIM_PREV */ |
213 | u32 op_delegate_type; /* request - CLAIM_PREV only */ | 224 | u32 op_delegate_type; /* request - CLAIM_PREV only */ |
214 | stateid_t op_delegate_stateid; /* request - response */ | 225 | stateid_t op_delegate_stateid; /* request - response */ |
226 | u32 op_why_no_deleg; /* response - DELEG_NONE_EXT only */ | ||
215 | u32 op_create; /* request */ | 227 | u32 op_create; /* request */ |
216 | u32 op_createmode; /* request */ | 228 | u32 op_createmode; /* request */ |
217 | u32 op_bmval[3]; /* request */ | 229 | u32 op_bmval[3]; /* request */ |
218 | struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */ | 230 | struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */ |
219 | nfs4_verifier verf; /* EXCLUSIVE4 */ | 231 | nfs4_verifier op_verf __attribute__((aligned(32))); |
232 | /* EXCLUSIVE4 */ | ||
220 | clientid_t op_clientid; /* request */ | 233 | clientid_t op_clientid; /* request */ |
221 | struct xdr_netobj op_owner; /* request */ | 234 | struct xdr_netobj op_owner; /* request */ |
222 | u32 op_seqid; /* request */ | 235 | u32 op_seqid; /* request */ |
223 | u32 op_share_access; /* request */ | 236 | u32 op_share_access; /* request */ |
224 | u32 op_share_deny; /* request */ | 237 | u32 op_share_deny; /* request */ |
238 | u32 op_deleg_want; /* request */ | ||
225 | stateid_t op_stateid; /* response */ | 239 | stateid_t op_stateid; /* response */ |
226 | u32 op_recall; /* recall */ | 240 | u32 op_recall; /* recall */ |
227 | struct nfsd4_change_info op_cinfo; /* response */ | 241 | struct nfsd4_change_info op_cinfo; /* response */ |
@@ -234,7 +248,6 @@ struct nfsd4_open { | |||
234 | struct nfs4_acl *op_acl; | 248 | struct nfs4_acl *op_acl; |
235 | }; | 249 | }; |
236 | #define op_iattr iattr | 250 | #define op_iattr iattr |
237 | #define op_verf verf | ||
238 | 251 | ||
239 | struct nfsd4_open_confirm { | 252 | struct nfsd4_open_confirm { |
240 | stateid_t oc_req_stateid /* request */; | 253 | stateid_t oc_req_stateid /* request */; |
@@ -245,8 +258,9 @@ struct nfsd4_open_confirm { | |||
245 | struct nfsd4_open_downgrade { | 258 | struct nfsd4_open_downgrade { |
246 | stateid_t od_stateid; | 259 | stateid_t od_stateid; |
247 | u32 od_seqid; | 260 | u32 od_seqid; |
248 | u32 od_share_access; | 261 | u32 od_share_access; /* request */ |
249 | u32 od_share_deny; | 262 | u32 od_deleg_want; /* request */ |
263 | u32 od_share_deny; /* request */ | ||
250 | }; | 264 | }; |
251 | 265 | ||
252 | 266 | ||
@@ -343,10 +357,15 @@ struct nfsd4_saved_compoundargs { | |||
343 | struct page **pagelist; | 357 | struct page **pagelist; |
344 | }; | 358 | }; |
345 | 359 | ||
360 | struct nfsd4_test_stateid_id { | ||
361 | __be32 ts_id_status; | ||
362 | stateid_t ts_id_stateid; | ||
363 | struct list_head ts_id_list; | ||
364 | }; | ||
365 | |||
346 | struct nfsd4_test_stateid { | 366 | struct nfsd4_test_stateid { |
347 | __be32 ts_num_ids; | 367 | __be32 ts_num_ids; |
348 | struct nfsd4_compoundargs *ts_saved_args; | 368 | struct list_head ts_stateid_list; |
349 | struct nfsd4_saved_compoundargs ts_savedp; | ||
350 | }; | 369 | }; |
351 | 370 | ||
352 | struct nfsd4_free_stateid { | 371 | struct nfsd4_free_stateid { |
@@ -503,7 +522,8 @@ static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp) | |||
503 | 522 | ||
504 | static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp) | 523 | static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp) |
505 | { | 524 | { |
506 | return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp); | 525 | return !(resp->cstate.slot->sl_flags & NFSD4_SLOT_CACHETHIS) |
526 | || nfsd4_is_solo_sequence(resp); | ||
507 | } | 527 | } |
508 | 528 | ||
509 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) | 529 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) |