summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_default.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-04-26 19:36:19 +0000
committeralc <alc@FreeBSD.org>2003-04-26 19:36:19 +0000
commit4f5c780f99402280fe4832361f12e924dc25df04 (patch)
treee00cbf8f47227227f31db23bae0582cdc2e7558c /sys/kern/vfs_default.c
parenta23076390bedf5de8125b8837baa6fdd96a82aee (diff)
downloadFreeBSD-src-4f5c780f99402280fe4832361f12e924dc25df04.zip
FreeBSD-src-4f5c780f99402280fe4832361f12e924dc25df04.tar.gz
- Lock the vm_object on entry to vm_object_terminate().
Diffstat (limited to 'sys/kern/vfs_default.c')
-rw-r--r--sys/kern/vfs_default.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index 58f1a86..556c37e 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -636,9 +636,9 @@ vop_stddestroyvobject(ap)
GIANT_REQUIRED;
- if (vp->v_object == NULL)
+ if (obj == NULL)
return (0);
-
+ VM_OBJECT_LOCK(obj);
if (obj->ref_count == 0) {
/*
* vclean() may be called twice. The first time
@@ -650,7 +650,10 @@ vop_stddestroyvobject(ap)
*/
if ((obj->flags & OBJ_DEAD) == 0)
vm_object_terminate(obj);
+ else
+ VM_OBJECT_UNLOCK(obj);
} else {
+ VM_OBJECT_UNLOCK(obj);
/*
* Woe to the process that tries to page now :-).
*/
OpenPOWER on IntegriCloud