The title is perhaps a misnomer. It does add an unlocked sleep that revalidates the page's object and pindex under the sleepq lock. This actually eliminates the need for object as an interlock in sleeps although this code is maintained because it does reduce the number of times object is dropped and picked back up.
The real thrust however is to refactor the sleep routines so I can ultimately eliminate some variants. We have too many and frankly the nonshared argument is very confusing. I am moving towards just passing allocflags. The only difference between vm_page_busy_sleep() and vm_page_sleep_if_busy() is that one returns with the object lock and one returns without. This could easily be solved with a VM_ALLOC_DROP or simply a busy_sleep() and busy_sleep_drop() that take an allocflags parameter to determine the lock type.
This helps me move towards simplifying the external API while still allowing for unlocked sleeps and potentially a third busy type (shared (io), exclusive, map) without adding a bunch of new interfaces.