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)
This commit is contained in:
parent
7ff487b3a2
commit
d973ab2c23
@ -1315,6 +1315,8 @@ vinvalbuf(struct vnode *vp, int flags, int slpflag, int slptimeo)
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user