svn commit: r185011 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Sun Nov 16 13:56:30 PST 2008


Author: kib
Date: Sun Nov 16 21:56:29 2008
New Revision: 185011
URL: http://svn.freebsd.org/changeset/base/185011

Log:
  Revert r184118. There is actually a code in the kernel, for instance in
  kern_unlinkat(), that expects that vn_start_write() actually fills the mp
  even when the call failed.
  
  As Tor noted, that pattern relies on the the type stability of the mount
  points, as well as that suspended mount points are never freed and
  V_XSLEEP is always passed to vn_start_write() when called on a freed
  mount point.
  
  Reported by:	stass
  Reviewed by:	tegge
  PR:		123768

Modified:
  head/sys/kern/vfs_vnops.c

Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c	Sun Nov 16 21:26:56 2008	(r185010)
+++ head/sys/kern/vfs_vnops.c	Sun Nov 16 21:56:29 2008	(r185011)
@@ -977,17 +977,12 @@ vn_start_write(vp, mpp, flags)
 		while ((mp->mnt_kern_flag & MNTK_SUSPEND) != 0) {
 			if (flags & V_NOWAIT) {
 				error = EWOULDBLOCK;
-				if (vp != NULL)
-					*mpp = NULL;
 				goto unlock;
 			}
 			error = msleep(&mp->mnt_flag, MNT_MTX(mp),
 			    (PUSER - 1) | (flags & PCATCH), "suspfs", 0);
-			if (error) {
-				if (vp != NULL)
-					*mpp = NULL;
+			if (error)
 				goto unlock;
-			}
 		}
 	}
 	if (flags & V_XSLEEP)
@@ -1051,8 +1046,6 @@ vn_start_secondary_write(vp, mpp, flags)
 	if (flags & V_NOWAIT) {
 		MNT_REL(mp);
 		MNT_IUNLOCK(mp);
-		if (vp != NULL)
-			*mpp = NULL;
 		return (EWOULDBLOCK);
 	}
 	/*
@@ -1063,8 +1056,6 @@ vn_start_secondary_write(vp, mpp, flags)
 	vfs_rel(mp);
 	if (error == 0)
 		goto retry;
-	if (vp != NULL)
-		*mpp = NULL;
 	return (error);
 }
 


More information about the svn-src-head mailing list