diff options
author | alc <alc@FreeBSD.org> | 2013-03-03 01:36:31 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2013-03-03 01:36:31 +0000 |
commit | 317a9584fbba8c2eed6ff9b28c3e0ed91052ff0f (patch) | |
tree | 9be561b7e06bae739de128fa0fadb192d5a86580 /sys/vm/vm_page.c | |
parent | d924385016be447df3186832464c1a47f33c733e (diff) | |
download | FreeBSD-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.c | 5 |
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); } /* |