diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-05-29 15:40:03 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-05-29 15:46:21 +0200 |
commit | 542f30e3092cab04eab413d9f14d28900fe3a59c (patch) | |
tree | fddfe0f6c0de73e0fc58c30670689330d25963cf | |
parent | 134656a01f0b0275f5192e9779ce7e07f4202b45 (diff) |
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.
-rw-r--r-- | vm/vm_page.c | 19 |
1 files changed, 11 insertions, 8 deletions
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 */ |