diff options
author | alc <alc@FreeBSD.org> | 2003-06-22 21:35:41 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-06-22 21:35:41 +0000 |
commit | fa54a6610e522e820a2a6679afa8a9a46818f211 (patch) | |
tree | 35bfb2aa8b61e54802910fb4be459989a2516fbe /sys/vm/vm_page.c | |
parent | 01da790999f6e45aef0a3c53cbf1b030acca4371 (diff) | |
download | FreeBSD-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.c | 2 |
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; } |