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)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to