summaryrefslogtreecommitdiff
path: root/vm
diff options
context:
space:
mode:
Diffstat (limited to 'vm')
-rw-r--r--vm/vm_page.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/vm/vm_page.c b/vm/vm_page.c
index 44573b10..fc1207ca 100644
--- a/vm/vm_page.c
+++ b/vm/vm_page.c
@@ -1096,6 +1096,7 @@ vm_page_seg_evict(struct vm_page_seg *seg, boolean_t external_only,
boolean_t reclaim, double_paging;
vm_object_t object;
boolean_t was_active;
+ boolean_t internal;
page = NULL;
object = NULL;
@@ -1169,9 +1170,9 @@ restart:
assert(!page->laundry);
assert(!(double_paging && page->external));
- if (object->internal || !alloc_paused ||
- ! IP_VALID(memory_manager_default) ||
- memory_manager_default_port(object->pager)) {
+ internal = object->internal || memory_manager_default_port(object->pager);
+ if (internal || !alloc_paused ||
+ ! IP_VALID(memory_manager_default)) {
double_paging = FALSE;
} else {
double_paging = page->laundry = TRUE;
@@ -1221,7 +1222,8 @@ out:
vm_pageout_page(page, FALSE, TRUE); /* flush it */
vm_object_unlock(object);
- if (double_paging) {
+ if (!internal && alloc_paused) {
+ /* We have only told external pager, continue evicting. */
goto restart;
}