if ((error = nfs_nget(mp, &nmp->nm_fh, &np)) != 0)
error = nfs_nget(mp, (nfsfh_t *)nmp->nm_fh, nmp->nm_fhsize, &np); if (error)
nfs_unmount(mp, mntflags, p)	struct mount *mp;	int mntflags;	struct proc *p;{	register struct nfsmount *nmp;	struct nfsnode *np;	struct vnode *vp;	int error, flags = 0;	if (mntflags & MNT_FORCE)		flags |= FORCECLOSE;	nmp = VFSTONFS(mp);	/*	 * Goes something like this..	 * - Check for activity on the root vnode (other than ourselves).	 * - Call vflush() to clear out vnodes for this file system,	 *   except for the root vnode.	 * - Decrement reference on the vnode representing remote root.	 * - Close the socket	 * - Free up the data structures	 */	/*	 * We need to decrement the ref. count on the nfsnode representing	 * the remote root.  See comment in mountnfs().  The VFS unmount()	 * has done vput on this vnode, otherwise we would get deadlock!	 */	if ((error = nfs_nget(mp, &nmp->nm_fh, &np)) != 0)		return(error);	vp = NFSTOV(np);	if (vp->v_usecount > 2) {		vput(vp);		return (EBUSY);	}	/*	 * Must handshake with nqnfs_clientd() if it is active.	 */	nmp->nm_flag |= NFSMNT_DISMINPROG;	while (nmp->nm_inprog != NULLVP)		(void) tsleep((caddr_t)&lbolt, PSOCK, "nfsdism", 0);	if ((error = vflush(mp, vp, flags)) != 0) {		vput(vp);		nmp->nm_flag &= ~NFSMNT_DISMINPROG;		return (error);	}	/*	 * We are now committed to the unmount.	 * For NQNFS, let the server daemon free the nfsmount structure.	 */	if (nmp->nm_flag & (NFSMNT_NQNFS | NFSMNT_KERB))		nmp->nm_flag |= NFSMNT_DISMNT;	/*	 * There are two reference counts to get rid of here.	 */	vrele(vp);	vrele(vp);	vgone(vp);	nfs_disconnect(nmp);	m_freem(nmp->nm_nam);	if ((nmp->nm_flag & (NFSMNT_NQNFS | NFSMNT_KERB)) == 0)		free((caddr_t)nmp, M_NFSMNT);	return (0);}