if (np->n_flag & NACC) { vattr.va_atime.tv_sec = np->n_atim.tv_sec; vattr.va_atime.tv_nsec = np->n_atim.tv_usec * 1000; } if (np->n_flag & NUPD) { vattr.va_mtime.tv_sec = np->n_mtim.tv_sec; vattr.va_mtime.tv_nsec = np->n_mtim.tv_usec * 1000; }
if (np->n_flag & NACC) vattr.va_atime = np->n_atim; if (np->n_flag & NUPD) vattr.va_mtime = np->n_mtim;
nfsspec_close(v)	void *v;{	struct vop_close_args /* {		struct vnode *a_vp;		int  a_fflag;		struct ucred *a_cred;		struct proc *a_p;	} */ *ap = v;	register struct vnode *vp = ap->a_vp;	register struct nfsnode *np = VTONFS(vp);	struct vattr vattr;	if (np->n_flag & (NACC | NUPD)) {		np->n_flag |= NCHG;		if (vp->v_usecount == 1 &&		    (vp->v_mount->mnt_flag & MNT_RDONLY) == 0) {			VATTR_NULL(&vattr);			if (np->n_flag & NACC) {				vattr.va_atime.tv_sec = np->n_atim.tv_sec;				vattr.va_atime.tv_nsec =				    np->n_atim.tv_usec * 1000;			}			if (np->n_flag & NUPD) {				vattr.va_mtime.tv_sec = np->n_mtim.tv_sec;				vattr.va_mtime.tv_nsec =				    np->n_mtim.tv_usec * 1000;			}			(void)VOP_SETATTR(vp, &vattr, ap->a_cred, ap->a_p);		}	}	return (VOCALL(spec_vnodeop_p, VOFFSET(vop_close), ap));}