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-all
mailing list