svn commit: r184118 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Tue Oct 21 09:55:50 UTC 2008


Author: kib
Date: Tue Oct 21 09:55:49 2008
New Revision: 184118
URL: http://svn.freebsd.org/changeset/base/184118

Log:
  Change vn_start_write() to clear *mpp on all failures when non-NULL vp
  is supplied, since vm_pageout_scan() expects it to be cleared on error.
  
  Submitted by:	tegge
  PR:	123768
  MFC after:	1 week

Modified:
  head/sys/kern/vfs_vnops.c

Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c	Tue Oct 21 09:45:02 2008	(r184117)
+++ head/sys/kern/vfs_vnops.c	Tue Oct 21 09:55:49 2008	(r184118)
@@ -967,12 +967,17 @@ 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 (error) {
+				if (vp != NULL)
+					*mpp = NULL;
 				goto unlock;
+			}
 		}
 	}
 	if (flags & V_XSLEEP)
@@ -1028,6 +1033,8 @@ vn_start_secondary_write(vp, mpp, flags)
 	if (flags & V_NOWAIT) {
 		MNT_REL(mp);
 		MNT_IUNLOCK(mp);
+		if (vp != NULL)
+			*mpp = NULL;
 		return (EWOULDBLOCK);
 	}
 	/*
@@ -1038,6 +1045,8 @@ 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-all mailing list