summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_pageout.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-10-24 06:43:04 +0000
committeralc <alc@FreeBSD.org>2003-10-24 06:43:04 +0000
commita71ff79234d3c3aeed5f10bdf3963df1d991ea85 (patch)
treea860aff4c48180e54e6344d0e0e4cac285c3da83 /sys/vm/vm_pageout.c
parent2a08abfe7db45ead4bfe82cafb8f28cda34152ba (diff)
downloadFreeBSD-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.c11
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.
*/
OpenPOWER on IntegriCloud