aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Cox <alc@FreeBSD.org>2003-04-20 03:41:21 +0000
committerAlan Cox <alc@FreeBSD.org>2003-04-20 03:41:21 +0000
commitd22bc7101cabd6af405b0f0fe8708f623fddbaa1 (patch)
treefc30655e6327bedf67b01a9b2800edf4b26bfd85
parent1c2132626f42c49b2c6fa345b82ae8c7a7893a97 (diff)
Notes
-rw-r--r--sys/vm/swap_pager.c2
-rw-r--r--sys/vm/vm_fault.c4
-rw-r--r--sys/vm/vm_object.c7
-rw-r--r--sys/vm/vm_pageout.c2
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)),