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_map.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_map.c')
-rw-r--r-- | sys/vm/vm_map.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index 1af2f1b..53b51b8 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -2143,9 +2143,7 @@ vm_map_delete(vm_map_t map, vm_offset_t start, vm_offset_t end) if (object->ref_count != 1 && (object->flags & (OBJ_NOSPLIT|OBJ_ONEMAPPING)) == OBJ_ONEMAPPING && (object->type == OBJT_DEFAULT || object->type == OBJT_SWAP)) { - VM_OBJECT_UNLOCK(object); vm_object_collapse(object); - VM_OBJECT_LOCK(object); vm_object_page_remove(object, offidxstart, offidxend, FALSE); if (object->type == OBJT_SWAP) swap_pager_freespace(object, offidxstart, count); @@ -2289,7 +2287,9 @@ vm_map_copy_entry( if ((src_object->handle == NULL) && (src_object->type == OBJT_DEFAULT || src_object->type == OBJT_SWAP)) { + VM_OBJECT_LOCK(src_object); vm_object_collapse(src_object); + VM_OBJECT_UNLOCK(src_object); if ((src_object->flags & (OBJ_NOSPLIT|OBJ_ONEMAPPING)) == OBJ_ONEMAPPING) { vm_object_split(src_entry); src_object = src_entry->object.vm_object; |