Use the VA_UTIMES_NULL flag to detect when NULL was passed to utimes()
instead of comparing the desired time against the current time as a heuristic. Reviewed by: rmacklem MFC after: 1 week
This commit is contained in:
parent
f7e925398c
commit
5055536eec
@ -1998,7 +1998,6 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount *mp, vnode_t vp,
|
||||
struct statfs fs;
|
||||
struct nfsfsinfo fsinf;
|
||||
struct timespec temptime;
|
||||
struct timeval curtime;
|
||||
NFSACL_T *aclp, *naclp = NULL;
|
||||
#ifdef QUOTA
|
||||
struct dqblk dqb;
|
||||
@ -2412,8 +2411,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount *mp, vnode_t vp,
|
||||
retnum += NFSX_V4TIME;
|
||||
break;
|
||||
case NFSATTRBIT_TIMEACCESSSET:
|
||||
NFSGETTIME(&curtime);
|
||||
if (vap->va_atime.tv_sec != curtime.tv_sec) {
|
||||
if ((vap->va_vaflags & VA_UTIMES_NULL) == 0) {
|
||||
NFSM_BUILD(tl, u_int32_t *, NFSX_V4SETTIME);
|
||||
*tl++ = txdr_unsigned(NFSV4SATTRTIME_TOCLIENT);
|
||||
txdr_nfsv4time(&vap->va_atime, tl);
|
||||
@ -2442,8 +2440,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount *mp, vnode_t vp,
|
||||
retnum += NFSX_V4TIME;
|
||||
break;
|
||||
case NFSATTRBIT_TIMEMODIFYSET:
|
||||
NFSGETTIME(&curtime);
|
||||
if (vap->va_mtime.tv_sec != curtime.tv_sec) {
|
||||
if ((vap->va_vaflags & VA_UTIMES_NULL) == 0) {
|
||||
NFSM_BUILD(tl, u_int32_t *, NFSX_V4SETTIME);
|
||||
*tl++ = txdr_unsigned(NFSV4SATTRTIME_TOCLIENT);
|
||||
txdr_nfsv4time(&vap->va_mtime, tl);
|
||||
|
@ -789,7 +789,7 @@ nfscl_fillsattr(struct nfsrv_descript *nd, struct vattr *vap,
|
||||
*tl = newnfs_false;
|
||||
}
|
||||
if (vap->va_atime.tv_sec != VNOVAL) {
|
||||
if (vap->va_atime.tv_sec != curtime.tv_sec) {
|
||||
if ((vap->va_vaflags & VA_UTIMES_NULL) == 0) {
|
||||
NFSM_BUILD(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
|
||||
*tl++ = txdr_unsigned(NFSV3SATTRTIME_TOCLIENT);
|
||||
txdr_nfsv3time(&vap->va_atime, tl);
|
||||
@ -802,7 +802,7 @@ nfscl_fillsattr(struct nfsrv_descript *nd, struct vattr *vap,
|
||||
*tl = txdr_unsigned(NFSV3SATTRTIME_DONTCHANGE);
|
||||
}
|
||||
if (vap->va_mtime.tv_sec != VNOVAL) {
|
||||
if (vap->va_mtime.tv_sec != curtime.tv_sec) {
|
||||
if ((vap->va_vaflags & VA_UTIMES_NULL) == 0) {
|
||||
NFSM_BUILD(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
|
||||
*tl++ = txdr_unsigned(NFSV3SATTRTIME_TOCLIENT);
|
||||
txdr_nfsv3time(&vap->va_mtime, tl);
|
||||
|
@ -1110,7 +1110,7 @@ nfsm_v3attrbuild_xx(struct vattr *va, int full, struct mbuf **mb,
|
||||
*tl = nfs_false;
|
||||
}
|
||||
if (va->va_atime.tv_sec != VNOVAL) {
|
||||
if (va->va_atime.tv_sec != time_second) {
|
||||
if ((va->va_vaflags & VA_UTIMES_NULL) == 0) {
|
||||
tl = nfsm_build_xx(3 * NFSX_UNSIGNED, mb, bpos);
|
||||
*tl++ = txdr_unsigned(NFSV3SATTRTIME_TOCLIENT);
|
||||
txdr_nfsv3time(&va->va_atime, tl);
|
||||
@ -1123,7 +1123,7 @@ nfsm_v3attrbuild_xx(struct vattr *va, int full, struct mbuf **mb,
|
||||
*tl = txdr_unsigned(NFSV3SATTRTIME_DONTCHANGE);
|
||||
}
|
||||
if (va->va_mtime.tv_sec != VNOVAL) {
|
||||
if (va->va_mtime.tv_sec != time_second) {
|
||||
if ((va->va_vaflags & VA_UTIMES_NULL) == 0) {
|
||||
tl = nfsm_build_xx(3 * NFSX_UNSIGNED, mb, bpos);
|
||||
*tl++ = txdr_unsigned(NFSV3SATTRTIME_TOCLIENT);
|
||||
txdr_nfsv3time(&va->va_mtime, tl);
|
||||
|
Loading…
Reference in New Issue
Block a user