Loading fs/nfsd/nfsfh.h +5 −8 Original line number Diff line number Diff line Loading @@ -259,19 +259,16 @@ fh_clear_wcc(struct svc_fh *fhp) static inline u64 nfsd4_change_attribute(struct kstat *stat, struct inode *inode) { if (IS_I_VERSION(inode)) { u64 chattr; if (IS_I_VERSION(inode)) { chattr = stat->ctime.tv_sec; chattr <<= 30; chattr += stat->ctime.tv_nsec; chattr += inode_query_iversion(inode); } else { chattr = stat->ctime.tv_sec; chattr <<= 32; chattr += stat->ctime.tv_nsec; } return chattr; } else return time_to_chattr(&stat->ctime); } extern void fill_pre_wcc(struct svc_fh *fhp); Loading include/linux/iversion.h +13 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,19 @@ inode_query_iversion(struct inode *inode) return cur >> I_VERSION_QUERIED_SHIFT; } /* * For filesystems without any sort of change attribute, the best we can * do is fake one up from the ctime: */ static inline u64 time_to_chattr(struct timespec64 *t) { u64 chattr = t->tv_sec; chattr <<= 32; chattr += t->tv_nsec; return chattr; } /** * inode_eq_iversion_raw - check whether the raw i_version counter has changed * @inode: inode to check Loading Loading
fs/nfsd/nfsfh.h +5 −8 Original line number Diff line number Diff line Loading @@ -259,19 +259,16 @@ fh_clear_wcc(struct svc_fh *fhp) static inline u64 nfsd4_change_attribute(struct kstat *stat, struct inode *inode) { if (IS_I_VERSION(inode)) { u64 chattr; if (IS_I_VERSION(inode)) { chattr = stat->ctime.tv_sec; chattr <<= 30; chattr += stat->ctime.tv_nsec; chattr += inode_query_iversion(inode); } else { chattr = stat->ctime.tv_sec; chattr <<= 32; chattr += stat->ctime.tv_nsec; } return chattr; } else return time_to_chattr(&stat->ctime); } extern void fill_pre_wcc(struct svc_fh *fhp); Loading
include/linux/iversion.h +13 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,19 @@ inode_query_iversion(struct inode *inode) return cur >> I_VERSION_QUERIED_SHIFT; } /* * For filesystems without any sort of change attribute, the best we can * do is fake one up from the ctime: */ static inline u64 time_to_chattr(struct timespec64 *t) { u64 chattr = t->tv_sec; chattr <<= 32; chattr += t->tv_nsec; return chattr; } /** * inode_eq_iversion_raw - check whether the raw i_version counter has changed * @inode: inode to check Loading