In vm_page_busy_acquire(), load the object pointer using
atomic_load_ptr() as we do elsewhere. Per the comment, the object
identity must be consistent across sleeps.
In vm_page_grab_sleep(), pass the correct pindex to
_vm_page_busy_sleep(). I'm not sure why clang doesn't warn about this.
The pindex is used to check the page's identity before going to sleep.
In particular, vm_page_grab_sleep() is used by unlocked grab, so the
object lock is not necessarily held when verifying the page's identity,
and the pindex may change if the page is moved, or freed and
re-allocated. I believe this can result in spurious VM_PAGER_FAILs from
vm_page_grab_valid_unlocked() or early termination of
In vm_page_grab_pages(), pass the correct pindex to
vm_page_grab_sleep(). Otherwise I believe vm_page_grab_pages() will
effectively spin when attempting to busy a busy page after the first
index in the range.