summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_reserv.c
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2012-01-01 21:46:16 +0000
committerattilio <attilio@FreeBSD.org>2012-01-01 21:46:16 +0000
commit7ba6fbeca7600b7cae7f906f0f15c69593757389 (patch)
treeaa28b72014163f17f86d9bbcb7e629e2044d22d1 /sys/vm/vm_reserv.c
parenta4ffaeb982a4249e679dc8b34aa4d4cec1137132 (diff)
downloadFreeBSD-src-7ba6fbeca7600b7cae7f906f0f15c69593757389.zip
FreeBSD-src-7ba6fbeca7600b7cae7f906f0f15c69593757389.tar.gz
Fix a spot missed during the last merge.
Diffstat (limited to 'sys/vm/vm_reserv.c')
-rw-r--r--sys/vm/vm_reserv.c32
1 files changed, 10 insertions, 22 deletions
diff --git a/sys/vm/vm_reserv.c b/sys/vm/vm_reserv.c
index 32bffd4..df08aac 100644
--- a/sys/vm/vm_reserv.c
+++ b/sys/vm/vm_reserv.c
@@ -495,33 +495,21 @@ vm_reserv_alloc_page(vm_object_t object, vm_pindex_t pindex)
/*
* Look for an existing reservation.
*/
- msucc = NULL;
- mpred = object->root;
- while (mpred != NULL) {
+ mpred = vm_radix_lookup_le(&object->rtree, pindex, VM_RADIX_BLACK);
+ if (mpred != NULL) {
KASSERT(mpred->pindex != pindex,
("vm_reserv_alloc_page: pindex already allocated"));
rv = vm_reserv_from_page(mpred);
if (rv->object == object && vm_reserv_has_pindex(rv, pindex))
goto found;
- else if (mpred->pindex < pindex) {
- if (msucc != NULL ||
- (msucc = TAILQ_NEXT(mpred, listq)) == NULL)
- break;
- KASSERT(msucc->pindex != pindex,
- ("vm_reserv_alloc_page: pindex already allocated"));
- rv = vm_reserv_from_page(msucc);
- if (rv->object == object &&
- vm_reserv_has_pindex(rv, pindex))
- goto found;
- else if (pindex < msucc->pindex)
- break;
- } else if (msucc == NULL) {
- msucc = mpred;
- mpred = TAILQ_PREV(msucc, pglist, listq);
- continue;
- }
- msucc = NULL;
- mpred = object->root = vm_page_splay(pindex, object->root);
+ }
+ msucc = vm_radix_lookup_ge(&object->rtree, pindex, VM_RADIX_BLACK);
+ if (msucc != NULL) {
+ KASSERT(msucc->pindex != pindex,
+ ("vm_reserv_alloc_page: pindex already allocated"));
+ rv = vm_reserv_from_page(msucc);
+ if (rv->object == object && vm_reserv_has_pindex(rv, pindex))
+ goto found;
}
/*
OpenPOWER on IntegriCloud