diff options
| author | Alan Cox <alc@FreeBSD.org> | 2003-04-20 03:41:21 +0000 |
|---|---|---|
| committer | Alan Cox <alc@FreeBSD.org> | 2003-04-20 03:41:21 +0000 |
| commit | d22bc7101cabd6af405b0f0fe8708f623fddbaa1 (patch) | |
| tree | fc30655e6327bedf67b01a9b2800edf4b26bfd85 | |
| parent | 1c2132626f42c49b2c6fa345b82ae8c7a7893a97 (diff) | |
Notes
| -rw-r--r-- | sys/vm/swap_pager.c | 2 | ||||
| -rw-r--r-- | sys/vm/vm_fault.c | 4 | ||||
| -rw-r--r-- | sys/vm/vm_object.c | 7 | ||||
| -rw-r--r-- | sys/vm/vm_pageout.c | 2 |
4 files changed, 14 insertions, 1 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 2adaf6fa2ee6..285c269d644a 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -1690,7 +1690,9 @@ swp_pager_force_pagein(struct swblock *swap, int idx) object = swap->swb_object; pindex = swap->swb_index; + VM_OBJECT_LOCK(object); vm_object_pip_add(object, 1); + VM_OBJECT_UNLOCK(object); m = vm_page_grab(object, pindex + idx, VM_ALLOC_NORMAL|VM_ALLOC_RETRY); if (m->valid == VM_PAGE_BITS_ALL) { VM_OBJECT_LOCK(object); diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index a7780c13bb70..e16ad8e7d914 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -278,7 +278,9 @@ RetryFault:; */ vm_object_reference(fs.first_object); fs.vp = vnode_pager_lock(fs.first_object); + VM_OBJECT_LOCK(fs.first_object); vm_object_pip_add(fs.first_object, 1); + VM_OBJECT_UNLOCK(fs.first_object); fs.lookup_still_valid = TRUE; @@ -637,7 +639,9 @@ readrest: } KASSERT(fs.object != next_object, ("object loop %p", next_object)); fs.object = next_object; + VM_OBJECT_LOCK(fs.object); vm_object_pip_add(fs.object, 1); + VM_OBJECT_UNLOCK(fs.object); } } diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 2a8a2cebdde6..1b27b1dadc47 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -1208,7 +1208,9 @@ vm_object_split(vm_map_entry_t entry) vm_page_unlock_queues(); } if (orig_object->type == OBJT_SWAP) { + VM_OBJECT_LOCK(orig_object); vm_object_pip_add(orig_object, 1); + VM_OBJECT_UNLOCK(orig_object); /* * copy orig_object pages into new_object * and destroy unneeded pages in @@ -1514,8 +1516,9 @@ vm_object_collapse(vm_object_t object) * Move the pager from backing_object to object. */ if (backing_object->type == OBJT_SWAP) { + VM_OBJECT_LOCK(backing_object); vm_object_pip_add(backing_object, 1); - + VM_OBJECT_UNLOCK(backing_object); /* * scrap the paging_offset junk and do a * discrete copy. This also removes major @@ -1524,7 +1527,9 @@ vm_object_collapse(vm_object_t object) * new swapper is able to optimize the * destroy-source case. */ + VM_OBJECT_LOCK(object); vm_object_pip_add(object, 1); + VM_OBJECT_UNLOCK(object); swap_pager_copy( backing_object, object, diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 8c07be291b61..0ea8390d8818 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -389,7 +389,9 @@ vm_pageout_flush(mc, count, flags) } object = mc[0]->object; vm_page_unlock_queues(); + VM_OBJECT_LOCK(object); vm_object_pip_add(object, count); + VM_OBJECT_UNLOCK(object); vm_pager_put_pages(object, mc, count, (flags | ((object == kernel_object) ? VM_PAGER_PUT_SYNC : 0)), |
