MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vm_map_copy_swap_object

Function vm_map_copy_swap_object

freebsd/vm/vm_map.c:4087–4129  ·  view source on GitHub ↗

* * vm_map_copy_swap_object: * * Copies a swap-backed object from an existing map entry to a * new one. Carries forward the swap charge. May change the * src object on return. */

Source from the content-addressed store, hash-verified

4085 * src object on return.
4086 */
4087static void
4088vm_map_copy_swap_object(vm_map_entry_t src_entry, vm_map_entry_t dst_entry,
4089 vm_offset_t size, vm_ooffset_t *fork_charge)
4090{
4091 vm_object_t src_object;
4092 struct ucred *cred;
4093 int charged;
4094
4095 src_object = src_entry->object.vm_object;
4096 charged = ENTRY_CHARGED(src_entry);
4097 if ((src_object->flags & OBJ_ANON) != 0) {
4098 VM_OBJECT_WLOCK(src_object);
4099 vm_object_collapse(src_object);
4100 if ((src_object->flags & OBJ_ONEMAPPING) != 0) {
4101 vm_object_split(src_entry);
4102 src_object = src_entry->object.vm_object;
4103 }
4104 vm_object_reference_locked(src_object);
4105 vm_object_clear_flag(src_object, OBJ_ONEMAPPING);
4106 VM_OBJECT_WUNLOCK(src_object);
4107 } else
4108 vm_object_reference(src_object);
4109 if (src_entry->cred != NULL &&
4110 !(src_entry->eflags & MAP_ENTRY_NEEDS_COPY)) {
4111 KASSERT(src_object->cred == NULL,
4112 ("OVERCOMMIT: vm_map_copy_anon_entry: cred %p",
4113 src_object));
4114 src_object->cred = src_entry->cred;
4115 src_object->charge = size;
4116 }
4117 dst_entry->object.vm_object = src_object;
4118 if (charged) {
4119 cred = curthread->td_ucred;
4120 crhold(cred);
4121 dst_entry->cred = cred;
4122 *fork_charge += size;
4123 if (!(src_entry->eflags & MAP_ENTRY_NEEDS_COPY)) {
4124 crhold(cred);
4125 src_entry->cred = cred;
4126 *fork_charge += size;
4127 }
4128 }
4129}
4130
4131/*
4132 * vm_map_copy_entry:

Callers 1

vm_map_copy_entryFunction · 0.85

Calls 6

vm_object_collapseFunction · 0.85
vm_object_splitFunction · 0.85
vm_object_clear_flagFunction · 0.85
vm_object_referenceFunction · 0.85
crholdFunction · 0.50

Tested by

no test coverage detected