Index: sys/vm/vm_map.c =================================================================== --- sys/vm/vm_map.c +++ sys/vm/vm_map.c @@ -917,40 +917,64 @@ y = root->left; if (y == NULL) break; - if (addr < y->start && y->left != NULL) { - /* Rotate right and put y on rlist. */ - root->left = y->right; - y->right = root; - vm_map_entry_set_max_free(root); - root = y->left; - y->left = rlist; - rlist = y; - } else { - /* Put root on rlist. */ + if (addr < y->start) { + if (y->left != NULL) { + /* Rotate right and put y on rlist. */ + root->left = y->right; + y->right = root; + vm_map_entry_set_max_free(root); + root = y->left; + y->left = rlist; + rlist = y; + continue; + } + } else if (addr >= y->end) { + if (y->right == NULL) + break; + /* Put root on rlist, y on llist. */ root->left = rlist; rlist = root; - root = y; + root = y->right; + y->right = llist; + llist = y; + continue; } + /* Put root on rlist. */ + root->left = rlist; + rlist = root; + root = y; } else if (addr >= root->end) { y = root->right; if (y == NULL) break; - if (addr >= y->end && y->right != NULL) { - /* Rotate left and put y on llist. */ - root->right = y->left; - y->left = root; - vm_map_entry_set_max_free(root); - root = y->right; - y->right = llist; - llist = y; - } else { - /* Put root on llist. */ + if (addr >= y->end) { + if (y->right != NULL) { + /* Rotate left and put y on llist. */ + root->right = y->left; + y->left = root; + vm_map_entry_set_max_free(root); + root = y->right; + y->right = llist; + llist = y; + continue; + } + } else if (addr < y->start) { + if (y->left == NULL) + break; + /* Put root on llist, y on rlist. */ root->right = llist; llist = root; - root = y; + root = y->left; + y->left = rlist; + rlist = y; + continue; } - } else - break; + /* Put root on llist. */ + root->right = llist; + llist = root; + root = y; + } + break; } /*