| 1646 | } |
| 1647 | |
| 1648 | static vm_page_t |
| 1649 | vm_object_collapse_scan_wait(vm_object_t object, vm_page_t p) |
| 1650 | { |
| 1651 | vm_object_t backing_object; |
| 1652 | |
| 1653 | VM_OBJECT_ASSERT_WLOCKED(object); |
| 1654 | backing_object = object->backing_object; |
| 1655 | VM_OBJECT_ASSERT_WLOCKED(backing_object); |
| 1656 | |
| 1657 | KASSERT(p == NULL || p->object == object || p->object == backing_object, |
| 1658 | ("invalid ownership %p %p %p", p, object, backing_object)); |
| 1659 | /* The page is only NULL when rename fails. */ |
| 1660 | if (p == NULL) { |
| 1661 | VM_OBJECT_WUNLOCK(object); |
| 1662 | VM_OBJECT_WUNLOCK(backing_object); |
| 1663 | vm_radix_wait(); |
| 1664 | } else { |
| 1665 | if (p->object == object) |
| 1666 | VM_OBJECT_WUNLOCK(backing_object); |
| 1667 | else |
| 1668 | VM_OBJECT_WUNLOCK(object); |
| 1669 | vm_page_busy_sleep(p, "vmocol", false); |
| 1670 | } |
| 1671 | VM_OBJECT_WLOCK(object); |
| 1672 | VM_OBJECT_WLOCK(backing_object); |
| 1673 | return (TAILQ_FIRST(&backing_object->memq)); |
| 1674 | } |
| 1675 | |
| 1676 | static bool |
| 1677 | vm_object_scan_all_shadowed(vm_object_t object) |
no test coverage detected