aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nfsd/xdr4.h
diff options
context:
space:
mode:
authorAndy Adamson <andros@netapp.com>2009-04-03 01:28:45 -0400
committerJ. Bruce Fields <bfields@citi.umich.edu>2009-04-03 20:41:19 -0400
commit6668958fac1d05f55420de702f3678d46c1e93a5 (patch)
tree2ee7fe01bb6720ecb1147c5c7f7e3d0289fc71bb /include/linux/nfsd/xdr4.h
parentdd453dfd70538cadc02cb47ff8d8cfd0cb8cf435 (diff)
nfsd41: stateid handling
When sessions are used, stateful operation sequenceid and stateid handling are not used. When sessions are used, on the first open set the seqid to 1, mark state confirmed and skip seqid processing. When sessionas are used the stateid generation number is ignored when it is zero whereas without sessions bad_stateid or stale stateid is returned. Add flags to propagate session use to all stateful ops and down to check_stateid_generation. Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: Andy Adamson <andros@netapp.com> [nfsd4_has_session should return a boolean, not u32] Signed-off-by: Benny Halevy <bhalevy@panasas.com> [nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1] [nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op] [nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op] Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'include/linux/nfsd/xdr4.h')
-rw-r--r--include/linux/nfsd/xdr4.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
index a0a2e8317a3b..b8b3dcba28cc 100644
--- a/include/linux/nfsd/xdr4.h
+++ b/include/linux/nfsd/xdr4.h
@@ -56,6 +56,11 @@ struct nfsd4_compound_state {
56 u32 status; 56 u32 status;
57}; 57};
58 58
59static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
60{
61 return cs->slot != NULL;
62}
63
59struct nfsd4_change_info { 64struct nfsd4_change_info {
60 u32 atomic; 65 u32 atomic;
61 u32 before_ctime_sec; 66 u32 before_ctime_sec;
@@ -536,7 +541,8 @@ extern __be32 nfsd4_sequence(struct svc_rqst *,
536extern __be32 nfsd4_destroy_session(struct svc_rqst *, 541extern __be32 nfsd4_destroy_session(struct svc_rqst *,
537 struct nfsd4_compound_state *, 542 struct nfsd4_compound_state *,
538 struct nfsd4_destroy_session *); 543 struct nfsd4_destroy_session *);
539extern __be32 nfsd4_process_open1(struct nfsd4_open *open); 544extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
545 struct nfsd4_open *open);
540extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp, 546extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
541 struct svc_fh *current_fh, struct nfsd4_open *open); 547 struct svc_fh *current_fh, struct nfsd4_open *open);
542extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, 548extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,