svn commit: r242569 - head/sys/cddl/compat/opensolaris/kern

Andriy Gapon avg at FreeBSD.org
Sun Nov 4 14:16:19 UTC 2012


Author: avg
Date: Sun Nov  4 14:16:18 2012
New Revision: 242569
URL: http://svn.freebsd.org/changeset/base/242569

Log:
  opensolaris_lookup: use vfs_busy in traverse before calling VFS_ROOT
  
  ... to ensure that we have a valid mountpoint during the call.
  
  Reviewed by:	kib
  MFC after:	19 days

Modified:
  head/sys/cddl/compat/opensolaris/kern/opensolaris_lookup.c

Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris_lookup.c
==============================================================================
--- head/sys/cddl/compat/opensolaris/kern/opensolaris_lookup.c	Sun Nov  4 14:15:13 2012	(r242568)
+++ head/sys/cddl/compat/opensolaris/kern/opensolaris_lookup.c	Sun Nov  4 14:16:18 2012	(r242569)
@@ -88,6 +88,7 @@ traverse(vnode_t **cvpp, int lktype)
 		vfsp = vn_mountedvfs(cvp);
 		if (vfsp == NULL)
 			break;
+		error = vfs_busy(vfsp, 0);
 		/*
 		 * tvp is NULL for *cvpp vnode, which we can't unlock.
 		 */
@@ -95,12 +96,15 @@ traverse(vnode_t **cvpp, int lktype)
 			vput(cvp);
 		else
 			vrele(cvp);
+		if (error)
+			return (error);
 
 		/*
 		 * The read lock must be held across the call to VFS_ROOT() to
 		 * prevent a concurrent unmount from destroying the vfs.
 		 */
 		error = VFS_ROOT(vfsp, lktype, &tvp);
+		vfs_unbusy(vfsp);
 		if (error != 0)
 			return (error);
 		cvp = tvp;


More information about the svn-src-all mailing list