aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2021-10-20 00:27:23 +0000
committerMark Johnston <markj@FreeBSD.org>2021-10-20 01:22:56 +0000
commitb801c79dda53294b55fa19b81d43be25e00ec81f (patch)
treeddd99858a9b6648970763344255c7d9110f69723
parent6d3c78d970283dc5e64eaf10a4ae40b54613d608 (diff)
downloadsrc-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.c20
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))