Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 May 2014 05:26:43 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r265945 - stable/10/sys/vm
Message-ID:  <201405130526.s4D5Qh5f075845@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: alc
Date: Tue May 13 05:26:43 2014
New Revision: 265945
URL: http://svnweb.freebsd.org/changeset/base/265945

Log:
  MFC r265418
    Prior to r254304, a separate function, vm_pageout_page_stats(), was used
    to periodically update the reference status of the active pages.  This
    function was called, instead of vm_pageout_scan(), when memory was not
    scarce.  The objective was to provide up to date reference status for
    active pages in case memory did become scarce and active pages needed to
    be deactivated.
  
    The active page queue scan performed by vm_pageout_page_stats() was
    virtually identical to that performed by vm_pageout_scan(), and so r254304
    eliminated vm_pageout_page_stats().  Instead, vm_pageout_scan() is
    called with the parameter "pass" set to zero.  The intention was that when
    pass is zero, vm_pageout_scan() would only scan the active queue.
    However, the variable page_shortage can still be greater than zero when
    memory is not scarce and vm_pageout_scan() is called with pass equal to
    zero.  Consequently, the inactive queue may be scanned and dirty pages
    laundered even though that was not intended by r254304.  This revision
    fixes that.

Modified:
  stable/10/sys/vm/vm_pageout.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/vm/vm_pageout.c
==============================================================================
--- stable/10/sys/vm/vm_pageout.c	Tue May 13 05:21:54 2014	(r265944)
+++ stable/10/sys/vm/vm_pageout.c	Tue May 13 05:26:43 2014	(r265945)
@@ -942,13 +942,15 @@ vm_pageout_scan(struct vm_domain *vmd, i
 	 */
 	addl_page_shortage = 0;
 
-	deficit = atomic_readandclear_int(&vm_pageout_deficit);
-
 	/*
 	 * Calculate the number of pages we want to either free or move
 	 * to the cache.
 	 */
-	page_shortage = vm_paging_target() + deficit;
+	if (pass > 0) {
+		deficit = atomic_readandclear_int(&vm_pageout_deficit);
+		page_shortage = vm_paging_target() + deficit;
+	} else
+		page_shortage = deficit = 0;
 
 	/*
 	 * maxlaunder limits the number of dirty pages we flush per scan.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405130526.s4D5Qh5f075845>