Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/uipc_shm.c
Show First 20 Lines • Show All 201 Lines • ▼ Show 20 Lines | if (vm_pager_has_page(obj, idx, NULL, NULL)) { | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
return (EIO); | return (EIO); | ||||
} | } | ||||
} else | } else | ||||
vm_page_zero_invalid(m, TRUE); | vm_page_zero_invalid(m, TRUE); | ||||
vm_page_xunbusy(m); | vm_page_xunbusy(m); | ||||
} | } | ||||
vm_page_lock(m); | vm_page_lock(m); | ||||
vm_page_hold(m); | vm_page_wire(m); | ||||
if (vm_page_active(m)) | |||||
vm_page_reference(m); | |||||
else | |||||
vm_page_activate(m); | |||||
vm_page_unlock(m); | vm_page_unlock(m); | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
error = uiomove_fromphys(&m, offset, tlen, uio); | error = uiomove_fromphys(&m, offset, tlen, uio); | ||||
if (uio->uio_rw == UIO_WRITE && error == 0) { | if (uio->uio_rw == UIO_WRITE && error == 0) { | ||||
VM_OBJECT_WLOCK(obj); | VM_OBJECT_WLOCK(obj); | ||||
vm_page_dirty(m); | vm_page_dirty(m); | ||||
vm_pager_page_unswapped(m); | vm_pager_page_unswapped(m); | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
} | } | ||||
vm_page_lock(m); | vm_page_lock(m); | ||||
vm_page_unhold(m); | vm_page_unwire(m, PQ_ACTIVE); | ||||
vm_page_unlock(m); | vm_page_unlock(m); | ||||
return (error); | return (error); | ||||
} | } | ||||
int | int | ||||
uiomove_object(vm_object_t obj, off_t obj_size, struct uio *uio) | uiomove_object(vm_object_t obj, off_t obj_size, struct uio *uio) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 951 Lines • Show Last 20 Lines |