summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_fault.c
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2013-05-22 15:11:00 +0000
committerattilio <attilio@FreeBSD.org>2013-05-22 15:11:00 +0000
commit2df95f4b3ace7ecf0dd47dfd74ea492ca06e4b7e (patch)
tree4bf1f639d8ef8937478386891804a78c503a8751 /sys/vm/vm_fault.c
parent99ab7b9d5df4dc2e5a0c020083a7524d302db582 (diff)
downloadFreeBSD-src-2df95f4b3ace7ecf0dd47dfd74ea492ca06e4b7e.zip
FreeBSD-src-2df95f4b3ace7ecf0dd47dfd74ea492ca06e4b7e.tar.gz
Acquire read lock on the src object for vm_fault_copy_entry().
Sponsored by: EMC / Isilon storage division Reviewed by: alc
Diffstat (limited to 'sys/vm/vm_fault.c')
-rw-r--r--sys/vm/vm_fault.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 1313bc8..d7cc651 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -1318,7 +1318,7 @@ vm_fault_copy_entry(vm_map_t dst_map, vm_map_t src_map,
* (Because the source is wired down, the page will be in
* memory.)
*/
- VM_OBJECT_WLOCK(src_object);
+ VM_OBJECT_RLOCK(src_object);
object = src_object;
pindex = src_pindex + dst_pindex;
while ((src_m = vm_page_lookup(object, pindex)) == NULL &&
@@ -1327,15 +1327,15 @@ vm_fault_copy_entry(vm_map_t dst_map, vm_map_t src_map,
/*
* Allow fallback to backing objects if we are reading.
*/
- VM_OBJECT_WLOCK(backing_object);
+ VM_OBJECT_RLOCK(backing_object);
pindex += OFF_TO_IDX(object->backing_object_offset);
- VM_OBJECT_WUNLOCK(object);
+ VM_OBJECT_RUNLOCK(object);
object = backing_object;
}
if (src_m == NULL)
panic("vm_fault_copy_wired: page missing");
pmap_copy_page(src_m, dst_m);
- VM_OBJECT_WUNLOCK(object);
+ VM_OBJECT_RUNLOCK(object);
dst_m->valid = VM_PAGE_BITS_ALL;
dst_m->dirty = VM_PAGE_BITS_ALL;
VM_OBJECT_WUNLOCK(dst_object);
OpenPOWER on IntegriCloud