summaryrefslogtreecommitdiffstats
path: root/sys/vm/swap_pager.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1998-04-29 04:28:22 +0000
committerdyson <dyson@FreeBSD.org>1998-04-29 04:28:22 +0000
commitb5a79794cdadebe1ac863e5b8bde8d4b86cb8a5e (patch)
treee81f03d1aec7ca81483ab31e8815b8289c35be97 /sys/vm/swap_pager.c
parent67c7bb9c04ed76649b6be0484dcfaa84fa554bcd (diff)
downloadFreeBSD-src-b5a79794cdadebe1ac863e5b8bde8d4b86cb8a5e.zip
FreeBSD-src-b5a79794cdadebe1ac863e5b8bde8d4b86cb8a5e.tar.gz
Tighten up management of memory and swap space during map allocation,
deallocation cycles. This should provide a measurable improvement on swap and memory allocation on loaded systems. It is unlikely a complete solution. Also, provide more map info with procfs. Chuck Cranor spurred on this improvement.
Diffstat (limited to 'sys/vm/swap_pager.c')
-rw-r--r--sys/vm/swap_pager.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index 90ae42e..ea1824d 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -39,7 +39,7 @@
* from: Utah $Hdr: swap_pager.c 1.4 91/04/30$
*
* @(#)swap_pager.c 8.9 (Berkeley) 3/21/94
- * $Id: swap_pager.c,v 1.92 1998/03/07 21:36:54 dyson Exp $
+ * $Id: swap_pager.c,v 1.93 1998/04/15 17:47:35 bde Exp $
*/
/*
@@ -631,12 +631,13 @@ rfinished:
*/
void
-swap_pager_copy(srcobject, srcoffset, dstobject, dstoffset, offset)
+swap_pager_copy(srcobject, srcoffset, dstobject, dstoffset, offset, destroysource)
vm_object_t srcobject;
vm_pindex_t srcoffset;
vm_object_t dstobject;
vm_pindex_t dstoffset;
vm_pindex_t offset;
+ int destroysource;
{
vm_pindex_t i;
int origsize;
@@ -722,16 +723,17 @@ swap_pager_copy(srcobject, srcoffset, dstobject, dstoffset, offset)
/*
* Free left over swap blocks
*/
- swap_pager_free_swap(srcobject);
+ if (destroysource) {
+ swap_pager_free_swap(srcobject);
- if (srcobject->un_pager.swp.swp_allocsize) {
- printf("swap_pager_copy: *warning* pager with %d blocks (orig: %d)\n",
- srcobject->un_pager.swp.swp_allocsize, origsize);
- }
-
- free(srcobject->un_pager.swp.swp_blocks, M_VMPGDATA);
- srcobject->un_pager.swp.swp_blocks = NULL;
+ if (srcobject->un_pager.swp.swp_allocsize) {
+ printf("swap_pager_copy: *warning* pager with %d blocks (orig: %d)\n",
+ srcobject->un_pager.swp.swp_allocsize, origsize);
+ }
+ free(srcobject->un_pager.swp.swp_blocks, M_VMPGDATA);
+ srcobject->un_pager.swp.swp_blocks = NULL;
+ }
return;
}
OpenPOWER on IntegriCloud