diff options
author | kib <kib@FreeBSD.org> | 2014-08-20 08:24:37 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2014-08-20 08:24:37 +0000 |
commit | 68885db3a43102cad225553e8d7f23af4425b341 (patch) | |
tree | 2c8898ed67fcbda81c0187d621aafc5d99c34a8b | |
parent | c4195049f50843730d019b09549639061baee9f3 (diff) | |
download | FreeBSD-src-68885db3a43102cad225553e8d7f23af4425b341.zip FreeBSD-src-68885db3a43102cad225553e8d7f23af4425b341.tar.gz |
MFC r269907:
Fix leaks of unqueued unwired pages.
-rw-r--r-- | sys/kern/kern_exec.c | 1 | ||||
-rw-r--r-- | sys/kern/uipc_shm.c | 12 | ||||
-rw-r--r-- | sys/vm/vm_glue.c | 1 |
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); |