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