svn commit: r250028 - head/sys/vm
Konstantin Belousov
kib at FreeBSD.org
Sun Apr 28 19:19:26 UTC 2013
Author: kib
Date: Sun Apr 28 19:19:26 2013
New Revision: 250028
URL: http://svnweb.freebsd.org/changeset/base/250028
Log:
Assert that the object type for the vnode' non-NULL v_object, passed
to vnode_pager_setsize(), is either OBJT_VNODE, or, if vnode was
already reclaimed, OBJT_DEAD. Note that the later is only possible
due to some filesystems, in particular, nfsiods from nfs clients, call
vnode_pager_setsize() with unlocked vnode.
More, if the object is terminated, do not perform the resizing
operation.
Reviewed by: alc
Tested by: pho, bf
MFC after: 1 week
Modified:
head/sys/vm/vnode_pager.c
Modified: head/sys/vm/vnode_pager.c
==============================================================================
--- head/sys/vm/vnode_pager.c Sun Apr 28 19:12:09 2013 (r250027)
+++ head/sys/vm/vnode_pager.c Sun Apr 28 19:19:26 2013 (r250028)
@@ -380,6 +380,12 @@ vnode_pager_setsize(vp, nsize)
return;
/* ASSERT_VOP_ELOCKED(vp, "vnode_pager_setsize and not locked vnode"); */
VM_OBJECT_WLOCK(object);
+ if (object->type == OBJT_DEAD) {
+ VM_OBJECT_WUNLOCK(object);
+ return;
+ }
+ KASSERT(object->type == OBJT_VNODE,
+ ("not vnode-backed object %p", object));
if (nsize == object->un_pager.vnp.vnp_size) {
/*
* Hasn't changed size
More information about the svn-src-head
mailing list