svn commit: r248684 - head/sys/vm
Alan Cox
alc at FreeBSD.org
Sun Mar 24 16:43:08 UTC 2013
Author: alc
Date: Sun Mar 24 16:43:07 2013
New Revision: 248684
URL: http://svnweb.freebsd.org/changeset/base/248684
Log:
Micro-optimize the control flow in a few places. Eliminate a panic call
that could never be reached in vm_radix_insert(). (If the pointer being
checked by the panic call were ever NULL, the immmediately preceding loop
would have already crashed on a NULL pointer dereference.)
Reviewed by: attilio (an earlier version)
Sponsored by: EMC / Isilon Storage Division
Modified:
head/sys/vm/vm_radix.c
Modified: head/sys/vm/vm_radix.c
==============================================================================
--- head/sys/vm/vm_radix.c Sun Mar 24 16:41:23 2013 (r248683)
+++ head/sys/vm/vm_radix.c Sun Mar 24 16:43:07 2013 (r248684)
@@ -310,7 +310,9 @@ vm_radix_reclaim_allnodes_int(struct vm_
{
int slot;
- for (slot = 0; slot < VM_RADIX_COUNT && rnode->rn_count != 0; slot++) {
+ KASSERT(rnode->rn_count <= VM_RADIX_COUNT,
+ ("vm_radix_reclaim_allnodes_int: bad count in rnode %p", rnode));
+ for (slot = 0; rnode->rn_count != 0; slot++) {
if (rnode->rn_child[slot] == NULL)
continue;
if (vm_radix_node_page(rnode->rn_child[slot]) == NULL)
@@ -414,9 +416,7 @@ vm_radix_insert(struct vm_radix *rtree,
vm_radix_addpage(rnode, index, 0, page);
return;
}
- while (rnode != NULL) {
- if (vm_radix_keybarr(rnode, index))
- break;
+ do {
slot = vm_radix_slot(index, rnode->rn_clev);
m = vm_radix_node_page(rnode->rn_child[slot]);
if (m != NULL) {
@@ -437,9 +437,7 @@ vm_radix_insert(struct vm_radix *rtree,
return;
}
rnode = rnode->rn_child[slot];
- }
- if (rnode == NULL)
- panic("%s: path traversal ended unexpectedly", __func__);
+ } while (!vm_radix_keybarr(rnode, index));
/*
* Scan the trie from the top and find the parent to insert
@@ -748,8 +746,8 @@ vm_radix_reclaim_allnodes(struct vm_radi
root = vm_radix_getroot(rtree);
if (root == NULL)
return;
- vm_radix_reclaim_allnodes_int(root);
vm_radix_setroot(rtree, NULL);
+ vm_radix_reclaim_allnodes_int(root);
}
#ifdef DDB
More information about the svn-src-head
mailing list