aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nfsd/xdr4.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/nfsd/xdr4.h')
-rw-r--r--include/linux/nfsd/xdr4.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
index f80d6013fdc3..d0f050f01eca 100644
--- a/include/linux/nfsd/xdr4.h
+++ b/include/linux/nfsd/xdr4.h
@@ -64,10 +64,13 @@ static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
64 64
65struct nfsd4_change_info { 65struct nfsd4_change_info {
66 u32 atomic; 66 u32 atomic;
67 bool change_supported;
67 u32 before_ctime_sec; 68 u32 before_ctime_sec;
68 u32 before_ctime_nsec; 69 u32 before_ctime_nsec;
70 u64 before_change;
69 u32 after_ctime_sec; 71 u32 after_ctime_sec;
70 u32 after_ctime_nsec; 72 u32 after_ctime_nsec;
73 u64 after_change;
71}; 74};
72 75
73struct nfsd4_access { 76struct nfsd4_access {
@@ -503,10 +506,16 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
503{ 506{
504 BUG_ON(!fhp->fh_pre_saved || !fhp->fh_post_saved); 507 BUG_ON(!fhp->fh_pre_saved || !fhp->fh_post_saved);
505 cinfo->atomic = 1; 508 cinfo->atomic = 1;
506 cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec; 509 cinfo->change_supported = IS_I_VERSION(fhp->fh_dentry->d_inode);
507 cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec; 510 if (cinfo->change_supported) {
508 cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec; 511 cinfo->before_change = fhp->fh_pre_change;
509 cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec; 512 cinfo->after_change = fhp->fh_post_change;
513 } else {
514 cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec;
515 cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec;
516 cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec;
517 cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec;
518 }
510} 519}
511 520
512int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *); 521int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);