diff options
author | das <das@FreeBSD.org> | 2003-03-12 23:13:16 +0000 |
---|---|---|
committer | das <das@FreeBSD.org> | 2003-03-12 23:13:16 +0000 |
commit | 96f973e7de4d8f2a11ecedfae50b316319fd1026 (patch) | |
tree | 6cae5d8751656edd0c9fcd23480226ea6d6747ec /sys/vm/vm_pageout.c | |
parent | eb02bdf56a079dea8449cdfa53c66a3d36496504 (diff) | |
download | FreeBSD-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.c | 9 |
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. |