summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_page.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2013-03-03 01:36:31 +0000
committeralc <alc@FreeBSD.org>2013-03-03 01:36:31 +0000
commit317a9584fbba8c2eed6ff9b28c3e0ed91052ff0f (patch)
tree9be561b7e06bae739de128fa0fadb192d5a86580 /sys/vm/vm_page.c
parentd924385016be447df3186832464c1a47f33c733e (diff)
downloadFreeBSD-src-317a9584fbba8c2eed6ff9b28c3e0ed91052ff0f.zip
FreeBSD-src-317a9584fbba8c2eed6ff9b28c3e0ed91052ff0f.tar.gz
Two out of three times that vm_page_find_least() is called, it's going to
return the vm object's first page. In those cases, there is no need to traverse the trie. Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r--sys/vm/vm_page.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index 86f9096..75f4be9 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -929,9 +929,12 @@ vm_page_lookup(vm_object_t object, vm_pindex_t pindex)
vm_page_t
vm_page_find_least(vm_object_t object, vm_pindex_t pindex)
{
+ vm_page_t m;
VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
- return (vm_radix_lookup_ge(&object->rtree, pindex));
+ if ((m = TAILQ_FIRST(&object->memq)) != NULL && m->pindex < pindex)
+ m = vm_radix_lookup_ge(&object->rtree, pindex);
+ return (m);
}
/*
OpenPOWER on IntegriCloud