Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Jan 2011 01:37:39 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r217496 - stable/8/sys/fs/nfsserver
Message-ID:  <201101170137.p0H1bdvY083993@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Mon Jan 17 01:37:39 2011
New Revision: 217496
URL: http://svn.freebsd.org/changeset/base/217496

Log:
  MFC: r217017
  Fix the experimental NFS server to use vfs_busyfs() instead
  of vfs_getvfs() so that the mount point is busied for the
  VFS_FHTOVP() call. This is analagous to r185432 for the
  regular NFS server.

Modified:
  stable/8/sys/fs/nfsserver/nfs_nfsdport.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- stable/8/sys/fs/nfsserver/nfs_nfsdport.c	Mon Jan 17 01:26:13 2011	(r217495)
+++ stable/8/sys/fs/nfsserver/nfs_nfsdport.c	Mon Jan 17 01:37:39 2011	(r217496)
@@ -2548,8 +2548,8 @@ nfsd_fhtovp(struct nfsrv_descript *nd, s
 	/*
 	 * Check for the special case of the nfsv4root_fh.
 	 */
-	mp = vfs_getvfs(&fhp->fh_fsid);
-	if (!mp) {
+	mp = vfs_busyfs(&fhp->fh_fsid);
+	if (mp == NULL) {
 		*vpp = NULL;
 		nd->nd_repstat = ESTALE;
 		if (*mpp && exp->nes_vfslocked)
@@ -2575,6 +2575,7 @@ nfsd_fhtovp(struct nfsrv_descript *nd, s
 
 	nd->nd_repstat = nfsvno_fhtovp(mp, fhp, nd->nd_nam, lktype, vpp, exp,
 	    &credanon);
+	vfs_unbusy(mp);
 
 	/*
 	 * For NFSv4 without a pseudo root fs, unexported file handles
@@ -2636,11 +2637,8 @@ nfsd_fhtovp(struct nfsrv_descript *nd, s
 			VFS_UNLOCK_GIANT(mp);
 			exp->nes_vfslocked = 0;
 		}
-		vfs_rel(mp);
 		*vpp = NULL;
 		*mpp = NULL;
-	} else {
-		vfs_rel(mp);
 	}
 }
 
@@ -2780,10 +2778,11 @@ nfsvno_getvp(fhandle_t *fhp)
 	struct vnode *vp;
 	int error;
 
-	mp = vfs_getvfs(&fhp->fh_fsid);
+	mp = vfs_busyfs(&fhp->fh_fsid);
 	if (mp == NULL)
 		return (NULL);
 	error = VFS_FHTOVP(mp, &fhp->fh_fid, &vp);
+	vfs_unbusy(mp);
 	if (error)
 		return (NULL);
 	return (vp);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101170137.p0H1bdvY083993>