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 <[email protected]>
  Tested by:      John Marshall <[email protected]>, 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));
 }
 
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to