diff options
Diffstat (limited to 'vm')
-rw-r--r-- | vm/vm_page.c | 10 |
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; } |