Changeset View
Changeset View
Standalone View
Standalone View
head/sys/fs/tmpfs/tmpfs_subr.c
Show First 20 Lines • Show All 1,412 Lines • ▼ Show 20 Lines | retry: | ||||
MPASS(m->valid == VM_PAGE_BITS_ALL); | MPASS(m->valid == VM_PAGE_BITS_ALL); | ||||
} else if (vm_pager_has_page(uobj, idx, NULL, NULL)) { | } else if (vm_pager_has_page(uobj, idx, NULL, NULL)) { | ||||
m = vm_page_alloc(uobj, idx, VM_ALLOC_NORMAL | | m = vm_page_alloc(uobj, idx, VM_ALLOC_NORMAL | | ||||
VM_ALLOC_WAITFAIL); | VM_ALLOC_WAITFAIL); | ||||
if (m == NULL) | if (m == NULL) | ||||
goto retry; | goto retry; | ||||
rv = vm_pager_get_pages(uobj, &m, 1, NULL, | rv = vm_pager_get_pages(uobj, &m, 1, NULL, | ||||
NULL); | NULL); | ||||
vm_page_lock(m); | |||||
if (rv == VM_PAGER_OK) { | if (rv == VM_PAGER_OK) { | ||||
/* | /* | ||||
* Since the page was not resident, | * Since the page was not resident, | ||||
* and therefore not recently | * and therefore not recently | ||||
* accessed, immediately enqueue it | * accessed, immediately enqueue it | ||||
* for asynchronous laundering. The | * for asynchronous laundering. The | ||||
* current operation is not regarded | * current operation is not regarded | ||||
* as an access. | * as an access. | ||||
*/ | */ | ||||
vm_page_lock(m); | |||||
vm_page_launder(m); | vm_page_launder(m); | ||||
vm_page_unlock(m); | vm_page_unlock(m); | ||||
vm_page_xunbusy(m); | vm_page_xunbusy(m); | ||||
} else { | } else { | ||||
vm_page_free(m); | vm_page_free(m); | ||||
vm_page_unlock(m); | |||||
if (ignerr) | if (ignerr) | ||||
m = NULL; | m = NULL; | ||||
else { | else { | ||||
VM_OBJECT_WUNLOCK(uobj); | VM_OBJECT_WUNLOCK(uobj); | ||||
return (EIO); | return (EIO); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 432 Lines • Show Last 20 Lines |