* Waits for a backing object to clear a pending collapse and returns * it locked if it is an ANON object. */
| 850 | * it locked if it is an ANON object. |
| 851 | */ |
| 852 | static vm_object_t |
| 853 | vm_object_backing_collapse_wait(vm_object_t object) |
| 854 | { |
| 855 | vm_object_t backing_object; |
| 856 | |
| 857 | VM_OBJECT_ASSERT_WLOCKED(object); |
| 858 | |
| 859 | for (;;) { |
| 860 | backing_object = object->backing_object; |
| 861 | if (backing_object == NULL || |
| 862 | (backing_object->flags & OBJ_ANON) == 0) |
| 863 | return (NULL); |
| 864 | VM_OBJECT_WLOCK(backing_object); |
| 865 | if ((backing_object->flags & (OBJ_DEAD | OBJ_COLLAPSING)) == 0) |
| 866 | break; |
| 867 | VM_OBJECT_WUNLOCK(object); |
| 868 | vm_object_pip_sleep(backing_object, "vmbckwait"); |
| 869 | counter_u64_add(object_collapse_waits, 1); |
| 870 | VM_OBJECT_WLOCK(object); |
| 871 | } |
| 872 | return (backing_object); |
| 873 | } |
| 874 | |
| 875 | /* |
| 876 | * vm_object_terminate_pages removes any remaining pageable pages |
no test coverage detected