diff options
author | alc <alc@FreeBSD.org> | 2003-06-07 02:29:17 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-06-07 02:29:17 +0000 |
commit | 9b7a0e2182bad1564d1055d04d5f9bf6e76677b9 (patch) | |
tree | 6b07fd81cf3df794cfd512736cbfb078da009a9c /sys/vm/vm_object.c | |
parent | 90a400aeb4e681ac0728de53e9f5ab0338c38328 (diff) | |
download | FreeBSD-src-9b7a0e2182bad1564d1055d04d5f9bf6e76677b9.zip FreeBSD-src-9b7a0e2182bad1564d1055d04d5f9bf6e76677b9.tar.gz |
Pass the vm object to vm_object_collapse() with its lock held.
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 972d358..0822462 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -508,8 +508,8 @@ vm_object_deallocate(vm_object_t object) goto doterm; } object = robject; - /* XXX */ VM_OBJECT_UNLOCK(object); vm_object_collapse(object); + VM_OBJECT_UNLOCK(object); continue; } VM_OBJECT_UNLOCK(robject); @@ -1495,7 +1495,7 @@ vm_object_qcollapse(vm_object_t object) void vm_object_collapse(vm_object_t object) { - GIANT_REQUIRED; + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); while (TRUE) { vm_object_t backing_object; @@ -1505,9 +1505,6 @@ vm_object_collapse(vm_object_t object) * * The object exists and the backing object exists. */ - if (object == NULL) - break; - if ((backing_object = object->backing_object) == NULL) break; @@ -1536,7 +1533,7 @@ vm_object_collapse(vm_object_t object) VM_OBJECT_UNLOCK(backing_object); break; } - +/* XXX */ VM_OBJECT_UNLOCK(object); /* * We know that we can either collapse the backing object (if * the parent is the only reference to it) or (perhaps) have @@ -1645,6 +1642,7 @@ vm_object_collapse(vm_object_t object) */ if (vm_object_backing_scan(object, OBSC_TEST_ALL_SHADOWED) == 0) { VM_OBJECT_UNLOCK(backing_object); +/* XXX */ VM_OBJECT_LOCK(object); break; } @@ -1687,6 +1685,7 @@ vm_object_collapse(vm_object_t object) /* * Try again with this object's new backing object. */ +/* XXX */ VM_OBJECT_LOCK(object); } } @@ -1801,9 +1800,7 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, /* * Try to collapse the object first */ - VM_OBJECT_UNLOCK(prev_object); vm_object_collapse(prev_object); - VM_OBJECT_LOCK(prev_object); /* * Can't coalesce if: . more than one reference . paged out . shadows |