svn commit: r224712 - head/sys/kern

Martin Matuska mm at FreeBSD.org
Mon Aug 8 14:02:09 UTC 2011


Author: mm
Date: Mon Aug  8 14:02:08 2011
New Revision: 224712
URL: http://svn.freebsd.org/changeset/base/224712

Log:
  Revert r224655 and r224614 because vn_fullpath* does not always work
  on nullfs mounts.
  
  Change shall be reconsidered after 9.0 is released.
  
  Requested by:	re (kib)
  Approved by:	re (kib)

Modified:
  head/sys/kern/vfs_mount.c

Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c	Mon Aug  8 13:58:39 2011	(r224711)
+++ head/sys/kern/vfs_mount.c	Mon Aug  8 14:02:08 2011	(r224712)
@@ -362,60 +362,6 @@ vfs_mergeopts(struct vfsoptlist *toopts,
 }
 
 /*
- * Verify vnode's global path
- */
-static int
-vfs_verify_global_path(struct thread *td, struct vnode *vp, char *fspath)
-{
-	struct nameidata nd;
-	struct vnode *vp1;
-	char *rpath, *fbuf;
-	int error;
-
-	ASSERT_VOP_ELOCKED(vp, __func__);
-
-	/* Construct global filesystem path from vp. */
-	VOP_UNLOCK(vp, 0);
-	error = vn_fullpath_global(td, vp, &rpath, &fbuf);
-	if (error != 0) {
-		vrele(vp);
-		return (error);
-	}
-	if (strlen(rpath) >= MNAMELEN) {
-		vrele(vp);
-		error = ENAMETOOLONG;
-		goto out;
-	}
-
-	/*
-	 * Re-lookup the vnode by path. As a side effect, the vnode is
-	 * relocked.  If vnode was renamed, return ENOENT.
-	 */
-	NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
-	    UIO_SYSSPACE, fspath, td);
-	error = namei(&nd);
-	if (error != 0) {
-		vrele(vp);
-		goto out;
-	}
-	if (NDHASGIANT(&nd))
-		mtx_unlock(&Giant);
-	NDFREE(&nd, NDF_ONLY_PNBUF);
-	vp1 = nd.ni_vp;
-	vrele(vp);
-	if (vp1 != vp) {
-		vput(vp1);
-		error = ENOENT;
-		goto out;
-	}
-
-	strlcpy(fspath,rpath,MNAMELEN);
-out:
-	free(fbuf, M_TEMP);
-	return (error);
-}
-
-/*
  * Mount a filesystem.
  */
 int
@@ -1124,14 +1070,16 @@ vfs_domount(
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 	vp = nd.ni_vp;
 	if ((fsflags & MNT_UPDATE) == 0) {
-		error = vfs_verify_global_path(td, vp, fspath);
-		if (error == 0)
-			error = vfs_domount_first(td, vfsp, fspath, vp,
-			    fsflags, optlist);
-	} else
+		error = vfs_domount_first(td, vfsp, fspath, vp, fsflags,
+		    optlist);
+	} else {
 		error = vfs_domount_update(td, vp, fsflags, optlist);
+	}
 	mtx_unlock(&Giant);
 
+	ASSERT_VI_UNLOCKED(vp, __func__);
+	ASSERT_VOP_UNLOCKED(vp, __func__);
+
 	return (error);
 }
 
@@ -1157,7 +1105,6 @@ unmount(td, uap)
 	} */ *uap;
 {
 	struct mount *mp;
-	struct nameidata nd;
 	char *pathbuf;
 	int error, id0, id1;
 
@@ -1193,25 +1140,6 @@ unmount(td, uap)
 		mtx_unlock(&mountlist_mtx);
 	} else {
 		AUDIT_ARG_UPATH1(td, pathbuf);
-		/*
-		 * If we are jailed and this is not a root jail try to find
-		 * global path for path argument.
-		 */
-		if (jailed(td->td_ucred) &&
-		    td->td_ucred->cr_prison->pr_root != rootvnode) {
-			NDINIT(&nd, LOOKUP,
-			    FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
-			    UIO_SYSSPACE, pathbuf, td);
-			if (namei(&nd) == 0) {
-				if (NDHASGIANT(&nd))
-					mtx_unlock(&Giant);
-				NDFREE(&nd, NDF_ONLY_PNBUF);
-				error = vfs_verify_global_path(td, nd.ni_vp,
-				    pathbuf);
-				if (error == 0)
-					vput(nd.ni_vp);
-			}
-		}
 		mtx_lock(&mountlist_mtx);
 		TAILQ_FOREACH_REVERSE(mp, &mountlist, mntlist, mnt_list) {
 			if (strcmp(mp->mnt_stat.f_mntonname, pathbuf) == 0)


More information about the svn-src-head mailing list