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-all mailing list