svn commit: r256211 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Wed Oct 9 18:43:30 UTC 2013
Author: kib
Date: Wed Oct 9 18:43:29 2013
New Revision: 256211
URL: http://svnweb.freebsd.org/changeset/base/256211
Log:
Do not flush buffers when the v_object of the passed vnode does not
really belong to it. Such vnodes, with the pointers to other vnodes
v_objects, are typically instantiated by the bypass filesystems.
Invalidating mappings of other vnode pages and the pages is wrong,
since reclamation of the upper vnode does not imply that lower vnode
is reclaimed too.
One of the consequences of the improper reclamation was destruction of
the wired mappings of the lower vnode pages, triggering miscellaneous
assertions in the VM system.
Reported by: John Marshall <john.marshall at riverwillow.com.au>
Tested by: John Marshall <john.marshall at riverwillow.com.au>, pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Approved by: re (gjb)
Modified:
head/sys/kern/vfs_subr.c
Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c Wed Oct 9 18:41:35 2013 (r256210)
+++ head/sys/kern/vfs_subr.c Wed Oct 9 18:43:29 2013 (r256211)
@@ -1315,6 +1315,8 @@ vinvalbuf(struct vnode *vp, int flags, i
CTR3(KTR_VFS, "%s: vp %p with flags %d", __func__, vp, flags);
ASSERT_VOP_LOCKED(vp, "vinvalbuf");
+ if (vp->v_object != NULL && vp->v_object->handle != vp)
+ return (0);
return (bufobj_invalbuf(&vp->v_bufobj, flags, slpflag, slptimeo));
}
More information about the svn-src-head
mailing list