summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_page.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-06-22 21:35:41 +0000
committeralc <alc@FreeBSD.org>2003-06-22 21:35:41 +0000
commitfa54a6610e522e820a2a6679afa8a9a46818f211 (patch)
tree35bfb2aa8b61e54802910fb4be459989a2516fbe /sys/vm/vm_page.c
parent01da790999f6e45aef0a3c53cbf1b030acca4371 (diff)
downloadFreeBSD-src-fa54a6610e522e820a2a6679afa8a9a46818f211.zip
FreeBSD-src-fa54a6610e522e820a2a6679afa8a9a46818f211.tar.gz
Maintain a lock on the vm object of interest throughout vm_fault(),
releasing the lock only if we are about to sleep (e.g., vm_pager_get_pages() or vm_pager_has_pages()). If we sleep, we have marked the vm object with the paging-in-progress flag.
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r--sys/vm/vm_page.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index 7cb4607..ac13102 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -1736,7 +1736,9 @@ vm_page_cowfault(vm_page_t m)
if (mnew == NULL) {
vm_page_insert(m, object, pindex);
vm_page_unlock_queues();
+ VM_OBJECT_UNLOCK(object);
VM_WAIT;
+ VM_OBJECT_LOCK(object);
vm_page_lock_queues();
goto retry_alloc;
}
OpenPOWER on IntegriCloud