* Transfer a backing reference from backing_object to object. */
| 807 | * Transfer a backing reference from backing_object to object. |
| 808 | */ |
| 809 | static void |
| 810 | vm_object_backing_transfer(vm_object_t object, vm_object_t backing_object) |
| 811 | { |
| 812 | vm_object_t new_backing_object; |
| 813 | |
| 814 | /* |
| 815 | * Note that the reference to backing_object->backing_object |
| 816 | * moves from within backing_object to within object. |
| 817 | */ |
| 818 | vm_object_backing_remove_locked(object); |
| 819 | new_backing_object = backing_object->backing_object; |
| 820 | if (new_backing_object == NULL) |
| 821 | return; |
| 822 | if ((new_backing_object->flags & OBJ_ANON) != 0) { |
| 823 | VM_OBJECT_WLOCK(new_backing_object); |
| 824 | vm_object_backing_remove_locked(backing_object); |
| 825 | vm_object_backing_insert_locked(object, new_backing_object); |
| 826 | VM_OBJECT_WUNLOCK(new_backing_object); |
| 827 | } else { |
| 828 | object->backing_object = new_backing_object; |
| 829 | backing_object->backing_object = NULL; |
| 830 | } |
| 831 | } |
| 832 | |
| 833 | /* |
| 834 | * Wait for a concurrent collapse to settle. |
no test coverage detected