summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_pageout.c
diff options
context:
space:
mode:
authordas <das@FreeBSD.org>2003-03-12 23:13:16 +0000
committerdas <das@FreeBSD.org>2003-03-12 23:13:16 +0000
commit96f973e7de4d8f2a11ecedfae50b316319fd1026 (patch)
tree6cae5d8751656edd0c9fcd23480226ea6d6747ec /sys/vm/vm_pageout.c
parenteb02bdf56a079dea8449cdfa53c66a3d36496504 (diff)
downloadFreeBSD-src-96f973e7de4d8f2a11ecedfae50b316319fd1026.zip
FreeBSD-src-96f973e7de4d8f2a11ecedfae50b316319fd1026.tar.gz
- When the VM daemon is out of swap space and looking for a
process to kill, don't block on a map lock while holding the process lock. Instead, skip processes whose map locks are held and find something else to kill. - Add vm_map_trylock_read() to support the above. Reviewed by: alc, mike (mentor)
Diffstat (limited to 'sys/vm/vm_pageout.c')
-rw-r--r--sys/vm/vm_pageout.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 8e3c39f..dab4ae2 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -1214,8 +1214,13 @@ rescan0:
/*
* get the process size
*/
- size = vmspace_resident_count(p->p_vmspace) +
- vmspace_swap_count(p->p_vmspace);
+ if (!vm_map_trylock_read(&p->p_vmspace->vm_map)) {
+ PROC_UNLOCK(p);
+ continue;
+ }
+ size = vmspace_swap_count(p->p_vmspace);
+ vm_map_unlock_read(&p->p_vmspace->vm_map);
+ size += vmspace_resident_count(p->p_vmspace);
/*
* if the this process is bigger than the biggest one
* remember it.
OpenPOWER on IntegriCloud