Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Nov 2008 21:56:29 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r185011 - head/sys/kern
Message-ID:  <200811162156.mAGLuTSe065604@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }
 



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