vn_lock(vnp->vnp_vp, LK_EXCLUSIVE | LK_RETRY, p);
vn_lock(vnp->vnp_vp, LK_EXCLUSIVE | LK_RETRY | LK_CANRECURSE, p);
vnode_pager_haspage(pager, offset)	vm_pager_t pager;	vm_offset_t offset;{	struct proc *p = curproc;	/* XXX */	vn_pager_t vnp = (vn_pager_t)pager->pg_data;	daddr_t bn;	int err;#ifdef DEBUG	if (vpagerdebug & VDB_FOLLOW)		printf("vnode_pager_haspage(%p, %lx)\n", pager, offset);#endif	/*	 * Offset beyond end of file, do not have the page	 * Lock the vnode first to make sure we have the most recent	 * version of the size.	 */	vn_lock(vnp->vnp_vp, LK_EXCLUSIVE | LK_RETRY, p);	if (offset >= vnp->vnp_size) {		VOP_UNLOCK(vnp->vnp_vp, 0, p);#ifdef DEBUG		if (vpagerdebug & (VDB_FAIL|VDB_SIZE))			printf("vnode_pager_haspage: pg %p, off %lx, size %lx\n",			       pager, offset, vnp->vnp_size);#endif		return(FALSE);	}	/*	 * Read the index to find the disk block to read	 * from.  If there is no block, report that we don't	 * have this data.	 *	 * Assumes that the vnode has whole page or nothing.	 */	err = VOP_BMAP(vnp->vnp_vp,		       offset / vnp->vnp_vp->v_mount->mnt_stat.f_iosize,		       (struct vnode **)0, &bn, NULL);	VOP_UNLOCK(vnp->vnp_vp, 0, p);	if (err) {#ifdef DEBUG		if (vpagerdebug & VDB_FAIL)			printf("vnode_pager_haspage: BMAP err %d, pg %p, off %lx\n",			       err, pager, offset);#endif		return(TRUE);	}	return((long)bn < 0 ? FALSE : TRUE);}