diff options
author | alc <alc@FreeBSD.org> | 2003-04-26 19:36:19 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-04-26 19:36:19 +0000 |
commit | 4f5c780f99402280fe4832361f12e924dc25df04 (patch) | |
tree | e00cbf8f47227227f31db23bae0582cdc2e7558c /sys/kern/vfs_default.c | |
parent | a23076390bedf5de8125b8837baa6fdd96a82aee (diff) | |
download | FreeBSD-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.c | 7 |
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 :-). */ |