Rename vm_page_object_remove to vm_page_remove_radixdone, and remove
from it the responsibility for removing a page from its radix tree,
and pass that responsibility on to its callers.
For one of those callers, vm_page_rename, pass a pages pctrie_iter,
rather than a page, and use the iterator to remove the page from its
radix tree. For another caller, vm_page_free_prep, add a boolean
parameter to indicate whether or not to remove the page from its radix
tree.
Define functions vm_page_iter_remove() and vm_page_iter_free() that
are like vm_page_remove() and vm_page_free(), respectively, except
that they take an iterator as parameter rather than a page, and use
the iterator to remove the page from the radix tree instead of
searching the radix tree. Function vm_page_iter_free() iassumes theat
function that uses vm_page_free_prepthe page is associated with page removal disabledan object, sinceand calls
it does the page removal itselfvm_page_free_object_prep to do the part of vm_page_free_prep that is
object-related, so that vm_page_free_prep can assume that objects
associated with pages are not iterator-related and can be removed from
the radix tree in the original way.
In functions vm_object_split and vm_object_collapse_scan, use a
pctrie_iter to walk over the pages of the object, and use
vm_radix_iter_remove to remove the page from the object tree without
searching for its location.
Similarly, rewrite vm_object_page_remove and _kmem_unback to use
iterators and vm_page_iter_free.