Commit 4b03d997 authored by J. Bruce Fields's avatar J. Bruce Fields Committed by Chuck Lever
Browse files

nfsd: minor nfsd4_change_attribute cleanup



Minor cleanup, no change in behavior.

Also pull out a common helper that'll be useful elsewhere.

Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent b2140338
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -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);
+13 −0
Original line number Diff line number Diff line
@@ -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