uvm_vnp_uncache(vp);
nfs_open(v)	void *v;{	struct vop_open_args /* {		struct vnode *a_vp;		int  a_mode;		struct ucred *a_cred;		struct proc *a_p;	} */ *ap = v;	register struct vnode *vp = ap->a_vp;	struct nfsnode *np = VTONFS(vp);	struct vattr vattr;	int error;	if (vp->v_type != VREG && vp->v_type != VDIR && vp->v_type != VLNK) {#ifdef DIAGNOSTIC		printf("open eacces vtyp=%d\n",vp->v_type);#endif		return (EACCES);	}	/*	 * Initialize read and write creds here, for swapfiles	 * and other paths that don't set the creds themselves.	 */	if (ap->a_mode & FREAD) {		if (np->n_rcred) {			crfree(np->n_rcred);		}		np->n_rcred = ap->a_cred;		crhold(np->n_rcred);	}	if (ap->a_mode & FWRITE) {		if (np->n_wcred) {			crfree(np->n_wcred);		}		np->n_wcred = ap->a_cred;		crhold(np->n_wcred);	}	if (np->n_flag & NMODIFIED) {		if ((error = nfs_vinvalbuf(vp, V_SAVE, ap->a_cred,			 ap->a_p, 1)) == EINTR)			return (error);		np->n_attrstamp = 0;		if (vp->v_type == VDIR)			np->n_direofoffset = 0;		error = VOP_GETATTR(vp, &vattr, ap->a_cred, ap->a_p);		if (error)			return (error);		np->n_mtime = vattr.va_mtime.tv_sec;	} else {		error = VOP_GETATTR(vp, &vattr, ap->a_cred, ap->a_p);		if (error)			return (error);		if (np->n_mtime != vattr.va_mtime.tv_sec) {			if (vp->v_type == VDIR)				np->n_direofoffset = 0;			if ((error = nfs_vinvalbuf(vp, V_SAVE,				 ap->a_cred, ap->a_p, 1)) == EINTR)				return (error);			np->n_mtime = vattr.va_mtime.tv_sec;		}	}	np->n_attrstamp = 0; /* For Open/Close consistency */	return (0);}