diff options
author | alc <alc@FreeBSD.org> | 2003-10-24 06:43:04 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-10-24 06:43:04 +0000 |
commit | a71ff79234d3c3aeed5f10bdf3963df1d991ea85 (patch) | |
tree | a860aff4c48180e54e6344d0e0e4cac285c3da83 /sys/vm/swap_pager.c | |
parent | 2a08abfe7db45ead4bfe82cafb8f28cda34152ba (diff) | |
download | FreeBSD-src-a71ff79234d3c3aeed5f10bdf3963df1d991ea85.zip FreeBSD-src-a71ff79234d3c3aeed5f10bdf3963df1d991ea85.tar.gz |
- Push down Giant from vm_pageout() to vm_pageout_scan(), freeing
vm_pageout_page_stats() from Giant.
- Modify vm_pager_put_pages() and vm_pager_page_unswapped() to expect the
vm object to be locked on entry. (All of the pager routines now expect
this.)
Diffstat (limited to 'sys/vm/swap_pager.c')
-rw-r--r-- | sys/vm/swap_pager.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 4013dfd..9beff92 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -1187,6 +1187,7 @@ swap_pager_putpages(vm_object_t object, vm_page_t *m, int count, m[0]->object ); } + VM_OBJECT_UNLOCK(object); /* * Step 1 * @@ -1368,6 +1369,7 @@ swap_pager_putpages(vm_object_t object, vm_page_t *m, int count, swp_pager_async_iodone(bp); splx(s); } + VM_OBJECT_LOCK(object); } /* @@ -1652,13 +1654,13 @@ swp_pager_force_pagein(struct swblock *swap, int idx) m = vm_page_grab(object, pindex + idx, VM_ALLOC_NORMAL|VM_ALLOC_RETRY); if (m->valid == VM_PAGE_BITS_ALL) { vm_object_pip_subtract(object, 1); - VM_OBJECT_UNLOCK(object); vm_page_lock_queues(); vm_page_activate(m); vm_page_dirty(m); vm_page_wakeup(m); vm_page_unlock_queues(); vm_pager_page_unswapped(m); + VM_OBJECT_UNLOCK(object); return; } @@ -1666,14 +1668,13 @@ swp_pager_force_pagein(struct swblock *swap, int idx) VM_PAGER_OK) panic("swap_pager_force_pagein: read from swap failed");/*XXX*/ vm_object_pip_subtract(object, 1); - VM_OBJECT_UNLOCK(object); - vm_page_lock_queues(); vm_page_dirty(m); vm_page_dontneed(m); vm_page_wakeup(m); vm_page_unlock_queues(); vm_pager_page_unswapped(m); + VM_OBJECT_UNLOCK(object); } |