summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2015-06-12 11:32:20 +0000
committerglebius <glebius@FreeBSD.org>2015-06-12 11:32:20 +0000
commit519f1ccd36408835a3ffde065741910f56b9ebbe (patch)
treeab4d064f5d8cf6d2a2fb47602d4da01c082e11ee /sys/kern/kern_exec.c
parent34e109f495a7f36f028f98d9b09f1e5d533f73aa (diff)
downloadFreeBSD-src-519f1ccd36408835a3ffde065741910f56b9ebbe.zip
FreeBSD-src-519f1ccd36408835a3ffde065741910f56b9ebbe.tar.gz
Make KPI of vm_pager_get_pages() more strict: if a pager changes a page
in the requested array, then it is responsible for disposition of previous page and is responsible for updating the entry in the requested array. Now consumers of KPI do not need to re-lookup the pages after call to vm_pager_get_pages(). Reviewed by: kib Sponsored by: Netflix Sponsored by: Nginx, Inc.
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r--sys/kern/kern_exec.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index d3ae4f0..375e644 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -966,13 +966,10 @@ exec_map_first_page(imgp)
}
initial_pagein = i;
rv = vm_pager_get_pages(object, ma, initial_pagein, 0);
- ma[0] = vm_page_lookup(object, 0);
- if ((rv != VM_PAGER_OK) || (ma[0] == NULL)) {
- if (ma[0] != NULL) {
- vm_page_lock(ma[0]);
- vm_page_free(ma[0]);
- vm_page_unlock(ma[0]);
- }
+ if (rv != VM_PAGER_OK) {
+ vm_page_lock(ma[0]);
+ vm_page_free(ma[0]);
+ vm_page_unlock(ma[0]);
VM_OBJECT_WUNLOCK(object);
return (EIO);
}
OpenPOWER on IntegriCloud