diff options
author | attilio <attilio@FreeBSD.org> | 2013-02-24 16:10:43 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2013-02-24 16:10:43 +0000 |
commit | 6b1291b4d1f698048c27a58ed4ac41557801cf6d (patch) | |
tree | 006eeaa2a0b955967cad1eb414cdb24c26e09bec /sys/vm/vm_reserv.c | |
parent | f6d331e8040eae45579f93dce65e9ec6d9a34561 (diff) | |
download | FreeBSD-src-6b1291b4d1f698048c27a58ed4ac41557801cf6d.zip FreeBSD-src-6b1291b4d1f698048c27a58ed4ac41557801cf6d.tar.gz |
Do not call vm_radix_lookup_ge() in the reservation system unless
it is absolutely necessary.
Sponsored by: EMC / Isilon storage division
Submitted by: alc
Diffstat (limited to 'sys/vm/vm_reserv.c')
-rw-r--r-- | sys/vm/vm_reserv.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/vm/vm_reserv.c b/sys/vm/vm_reserv.c index e2ec77f..eb14411 100644 --- a/sys/vm/vm_reserv.c +++ b/sys/vm/vm_reserv.c @@ -349,8 +349,9 @@ vm_reserv_alloc_contig(vm_object_t object, vm_pindex_t pindex, u_long npages, rv = vm_reserv_from_page(mpred); if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) goto found; - } - msucc = vm_radix_lookup_ge(&object->rtree, pindex); + msucc = TAILQ_NEXT(mpred, listq); + } else + msucc = vm_radix_lookup_ge(&object->rtree, pindex); if (msucc != NULL) { KASSERT(msucc->pindex > pindex, ("vm_reserv_alloc_page: pindex already allocated")); @@ -503,8 +504,9 @@ vm_reserv_alloc_page(vm_object_t object, vm_pindex_t pindex) rv = vm_reserv_from_page(mpred); if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) goto found; - } - msucc = vm_radix_lookup_ge(&object->rtree, pindex); + msucc = TAILQ_NEXT(mpred, listq); + } else + msucc = vm_radix_lookup_ge(&object->rtree, pindex); if (msucc != NULL) { KASSERT(msucc->pindex > pindex, ("vm_reserv_alloc_page: pindex already allocated")); |