From d9f77c5b739a154c9ca07cbdf0e2679cd57449d5 Mon Sep 17 00:00:00 2001 From: alc Date: Sat, 20 Jul 2002 20:58:46 +0000 Subject: o Lock page queue accesses by vm_page_try_to_cache(). (The accesses in kern/vfs_bio.c are already locked.) o Assert that the page queues lock is held in vm_page_try_to_cache(). --- sys/vm/swap_pager.c | 2 ++ sys/vm/vm_page.c | 2 +- sys/vm/vm_pageout.c | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) (limited to 'sys/vm') diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index dfe34da..614fd48 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -1478,6 +1478,7 @@ swp_pager_async_iodone(bp) */ pmap_qremove((vm_offset_t)bp->b_data, bp->b_npages); + vm_page_lock_queues(); /* * cleanup pages. If an error occurs writing to swap, we are in * very serious trouble. If it happens to be a disk error, though, @@ -1596,6 +1597,7 @@ swp_pager_async_iodone(bp) vm_page_protect(m, VM_PROT_READ); } } + vm_page_unlock_queues(); /* * adjust pip. NOTE: the original parent may still have its own diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 3a80951..cb613be 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -1365,8 +1365,8 @@ vm_page_deactivate(vm_page_t m) int vm_page_try_to_cache(vm_page_t m) { - GIANT_REQUIRED; + mtx_assert(&vm_page_queue_mtx, MA_OWNED); if (m->dirty || m->hold_count || m->busy || m->wire_count || (m->flags & (PG_BUSY|PG_UNMANAGED))) { return (0); diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 047fac1..fe2ee34 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -392,6 +392,7 @@ vm_pageout_flush(mc, count, flags) (flags | ((object == kernel_object) ? OBJPC_SYNC : 0)), pageout_status); + vm_page_lock_queues(); for (i = 0; i < count; i++) { vm_page_t mt = mc[i]; @@ -437,6 +438,7 @@ vm_pageout_flush(mc, count, flags) vm_page_protect(mt, VM_PROT_READ); } } + vm_page_unlock_queues(); return numpagedout; } -- cgit v1.1