summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2025-05-29 15:40:03 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2025-05-29 15:46:21 +0200
commit542f30e3092cab04eab413d9f14d28900fe3a59c (patch)
treefddfe0f6c0de73e0fc58c30670689330d25963cf
parent134656a01f0b0275f5192e9779ce7e07f4202b45 (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.c19
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 */