Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/uipc_shm.c
Show First 20 Lines • Show All 219 Lines • ▼ Show 20 Lines | uiomove_object_page(vm_object_t obj, size_t len, struct uio *uio) | ||||
* pageout daemon does not need to acquire the tmpfs vnode | * pageout daemon does not need to acquire the tmpfs vnode | ||||
* lock to page out tobj's pages because tobj is a OBJT_SWAP | * lock to page out tobj's pages because tobj is a OBJT_SWAP | ||||
* type object. | * type object. | ||||
*/ | */ | ||||
rv = vm_page_grab_valid(&m, obj, idx, | rv = vm_page_grab_valid(&m, obj, idx, | ||||
VM_ALLOC_NORMAL | VM_ALLOC_SBUSY | VM_ALLOC_IGN_SBUSY); | VM_ALLOC_NORMAL | VM_ALLOC_SBUSY | VM_ALLOC_IGN_SBUSY); | ||||
if (rv != VM_PAGER_OK) { | if (rv != VM_PAGER_OK) { | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
printf("uiomove_object: vm_obj %p idx %jd pager error %d\n", | if (bootverbose) { | ||||
obj, idx, rv); | printf("uiomove_object: vm_obj %p idx %jd " | ||||
return (EIO); | "pager error %d\n", obj, idx, rv); | ||||
} | |||||
return (rv == VM_PAGER_AGAIN ? ENOSPC : EIO); | |||||
} | } | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
found: | found: | ||||
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_page_set_dirty(m); | vm_page_set_dirty(m); | ||||
vm_page_activate(m); | vm_page_activate(m); | ||||
▲ Show 20 Lines • Show All 1,883 Lines • Show Last 20 Lines |