Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Oct 2013 18:43:30 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r256211 - head/sys/kern
Message-ID:  <201310091843.r99IhUx9053738@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@riverwillow.com.au>
  Tested by:      John Marshall <john.marshall@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));
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310091843.r99IhUx9053738>