svn commit: r206770 - head/sys/vm

Alan Cox alc at FreeBSD.org
Sat Apr 17 21:14:37 UTC 2010


Author: alc
Date: Sat Apr 17 21:14:37 2010
New Revision: 206770
URL: http://svn.freebsd.org/changeset/base/206770

Log:
  In vm_object_madvise() setting PG_REFERENCED on a page before sleeping on
  that page only makes sense if the advice is MADV_WILLNEED.  In that case,
  the intention is to activate the page, so discouraging the page daemon
  from reclaiming the page makes sense.  In contrast, in the other cases,
  MADV_DONTNEED and MADV_FREE, it makes no sense whatsoever to discourage
  the page daemon from reclaiming the page by setting PG_REFERENCED.
  
  Wrap a nearby line.
  
  Discussed with:	kib
  MFC after:	3 weeks

Modified:
  head/sys/vm/vm_object.c

Modified: head/sys/vm/vm_object.c
==============================================================================
--- head/sys/vm/vm_object.c	Sat Apr 17 18:48:18 2010	(r206769)
+++ head/sys/vm/vm_object.c	Sat Apr 17 21:14:37 2010	(r206770)
@@ -1205,12 +1205,19 @@ shadowlookup:
 			goto unlock_tobject;
 		}
 		if ((m->oflags & VPO_BUSY) || m->busy) {
-			vm_page_flag_set(m, PG_REFERENCED);
+			if (advise == MADV_WILLNEED)
+				/*
+				 * Reference the page before unlocking and
+				 * sleeping so that the page daemon is less
+				 * likely to reclaim it. 
+				 */
+				vm_page_flag_set(m, PG_REFERENCED);
 			vm_page_unlock_queues();
 			if (object != tobject)
 				VM_OBJECT_UNLOCK(object);
 			m->oflags |= VPO_WANTED;
-			msleep(m, VM_OBJECT_MTX(tobject), PDROP | PVM, "madvpo", 0);
+			msleep(m, VM_OBJECT_MTX(tobject), PDROP | PVM, "madvpo",
+			    0);
 			VM_OBJECT_LOCK(object);
   			goto relookup;
 		}


More information about the svn-src-head mailing list