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/vm_pageout.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/vm_pageout.c')
-rw-r--r-- | sys/vm/vm_pageout.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 53e6013..471f9b3 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -362,12 +362,13 @@ more: int vm_pageout_flush(vm_page_t *mc, int count, int flags) { - vm_object_t object; + vm_object_t object = mc[0]->object; int pageout_status[count]; int numpagedout = 0; int i; mtx_assert(&vm_page_queue_mtx, MA_OWNED); + VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); /* * Initiate I/O. Bump the vm_page_t->busy counter and * mark the pages read-only. @@ -385,16 +386,13 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags) vm_page_io_start(mc[i]); pmap_page_protect(mc[i], VM_PROT_READ); } - object = mc[0]->object; vm_page_unlock_queues(); 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)), pageout_status); - VM_OBJECT_LOCK(object); vm_page_lock_queues(); for (i = 0; i < count; i++) { vm_page_t mt = mc[i]; @@ -669,7 +667,7 @@ vm_pageout_scan(int pass) int s; struct thread *td; - GIANT_REQUIRED; + mtx_lock(&Giant); /* * Decrease registered cache sizes. */ @@ -1224,6 +1222,7 @@ unlock_and_continue: wakeup(&cnt.v_free_count); } } + mtx_unlock(&Giant); } /* @@ -1324,8 +1323,6 @@ vm_pageout() { int error, pass, s; - mtx_lock(&Giant); - /* * Initialize some paging parameters. */ |