From 542f30e3092cab04eab413d9f14d28900fe3a59c Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Thu, 29 May 2025 15:40:03 +0200 Subject: vm_page_seg_evict: Fix creating a pager for internal objects with DMM fd63a4bbf6f2 ("vm_page: Avoid creating a pager in DMM when not double-paging") avoided crashes when we do not have a DMM and wish to evict an internal opbject. But the double_paging condition was too restrictive and prevented normal internal objects from paging out when we do have a DMM. This re-enables creating a pager when we do have a DMM, so internal objects can be paged out. --- vm/vm_page.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'vm') diff --git a/vm/vm_page.c b/vm/vm_page.c index 74764e34..6c5eba22 100644 --- a/vm/vm_page.c +++ b/vm/vm_page.c @@ -1213,16 +1213,19 @@ out: * one unnecessarily. */ - if (double_paging && !object->pager_initialized) { - vm_object_collapse(object); - } + if (IP_VALID(memory_manager_default)) { - if (double_paging && !object->pager_initialized) { - vm_object_pager_create(object); - } + if (!object->pager_initialized) { + vm_object_collapse(object); + } - if (double_paging && !object->pager_initialized) { - panic("vm_page_seg_evict"); + if (!object->pager_initialized) { + vm_object_pager_create(object); + } + + if (!object->pager_initialized) { + panic("vm_page_seg_evict"); + } } vm_pageout_page(page, FALSE, TRUE); /* flush it */ -- cgit v1.2.3