summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-08-20 08:24:37 +0000
committerkib <kib@FreeBSD.org>2014-08-20 08:24:37 +0000
commit68885db3a43102cad225553e8d7f23af4425b341 (patch)
tree2c8898ed67fcbda81c0187d621aafc5d99c34a8b
parentc4195049f50843730d019b09549639061baee9f3 (diff)
downloadFreeBSD-src-68885db3a43102cad225553e8d7f23af4425b341.zip
FreeBSD-src-68885db3a43102cad225553e8d7f23af4425b341.tar.gz
MFC r269907:
Fix leaks of unqueued unwired pages.
-rw-r--r--sys/kern/kern_exec.c1
-rw-r--r--sys/kern/uipc_shm.c12
-rw-r--r--sys/vm/vm_glue.c1
3 files changed, 8 insertions, 6 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index a07b64c..e720c7a 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -996,6 +996,7 @@ exec_map_first_page(imgp)
vm_page_xunbusy(ma[0]);
vm_page_lock(ma[0]);
vm_page_hold(ma[0]);
+ vm_page_activate(ma[0]);
vm_page_unlock(ma[0]);
VM_OBJECT_WUNLOCK(object);
diff --git a/sys/kern/uipc_shm.c b/sys/kern/uipc_shm.c
index 16434b7..b8eb96c 100644
--- a/sys/kern/uipc_shm.c
+++ b/sys/kern/uipc_shm.c
@@ -197,6 +197,12 @@ uiomove_object_page(vm_object_t obj, size_t len, struct uio *uio)
vm_page_xunbusy(m);
vm_page_lock(m);
vm_page_hold(m);
+ if (m->queue == PQ_NONE) {
+ vm_page_deactivate(m);
+ } else {
+ /* Requeue to maintain LRU ordering. */
+ vm_page_requeue(m);
+ }
vm_page_unlock(m);
VM_OBJECT_WUNLOCK(obj);
error = uiomove_fromphys(&m, offset, tlen, uio);
@@ -208,12 +214,6 @@ uiomove_object_page(vm_object_t obj, size_t len, struct uio *uio)
}
vm_page_lock(m);
vm_page_unhold(m);
- if (m->queue == PQ_NONE) {
- vm_page_deactivate(m);
- } else {
- /* Requeue to maintain LRU ordering. */
- vm_page_requeue(m);
- }
vm_page_unlock(m);
return (error);
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index 4512039..9e8995f 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -251,6 +251,7 @@ vm_imgact_hold_page(vm_object_t object, vm_ooffset_t offset)
vm_page_xunbusy(m);
vm_page_lock(m);
vm_page_hold(m);
+ vm_page_activate(m);
vm_page_unlock(m);
out:
VM_OBJECT_WUNLOCK(object);
OpenPOWER on IntegriCloud