diff options
author | Mark Johnston <markj@FreeBSD.org> | 2021-10-20 00:27:23 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2021-10-20 01:22:56 +0000 |
commit | b801c79dda53294b55fa19b81d43be25e00ec81f (patch) | |
tree | ddd99858a9b6648970763344255c7d9110f69723 | |
parent | 6d3c78d970283dc5e64eaf10a4ae40b54613d608 (diff) | |
download | src-b801c79dda53294b55fa19b81d43be25e00ec81f.tar.gz src-b801c79dda53294b55fa19b81d43be25e00ec81f.zip |
vm_fault: Stop specifying VM_ALLOC_ZERO
Now vm_page_alloc() and friends will unconditionally preserve PG_ZERO,
so there is no point in setting this flag.
Eliminate a local variable and add a comment explaining why we
prioritize the allocation when the process is doomed.
No functional change intended.
Reviewed by: kib, alc
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D32036
-rw-r--r-- | sys/vm/vm_fault.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 8a4b5a543dd6..6bc59222b50e 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -1113,7 +1113,6 @@ static int vm_fault_allocate(struct faultstate *fs) { struct domainset *dset; - int alloc_req; int rv; if ((fs->object->flags & OBJ_SIZEVNLOCK) != 0) { @@ -1150,9 +1149,14 @@ vm_fault_allocate(struct faultstate *fs) /* * Allocate a new page for this object/offset pair. * - * Unlocked read of the p_flag is harmless. At worst, the P_KILLED - * might be not observed there, and allocation can fail, causing - * restart and new reading of the p_flag. + * If the process has a fatal signal pending, prioritize the allocation + * with the expectation that the process will exit shortly and free some + * pages. In particular, the signal may have been posted by the page + * daemon in an attempt to resolve an out-of-memory condition. + * + * The unlocked read of the p_flag is harmless. At worst, the P_KILLED + * might be not observed here, and allocation fails, causing a restart + * and new reading of the p_flag. */ dset = fs->object->domain.dr_policy; if (dset == NULL) @@ -1161,12 +1165,8 @@ vm_fault_allocate(struct faultstate *fs) #if VM_NRESERVLEVEL > 0 vm_object_color(fs->object, atop(fs->vaddr) - fs->pindex); #endif - alloc_req = P_KILLED(curproc) ? - VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL; - if (fs->object->type != OBJT_VNODE && - fs->object->backing_object == NULL) - alloc_req |= VM_ALLOC_ZERO; - fs->m = vm_page_alloc(fs->object, fs->pindex, alloc_req); + fs->m = vm_page_alloc(fs->object, fs->pindex, + P_KILLED(curproc) ? VM_ALLOC_SYSTEM : 0); } if (fs->m == NULL) { if (vm_fault_allocate_oom(fs)) |