Changeset View
Changeset View
Standalone View
Standalone View
head/sys/fs/tmpfs/tmpfs_subr.c
Show First 20 Lines • Show All 1,474 Lines • ▼ Show 20 Lines | retry: | ||||
m = vm_page_grab(uobj, idx, VM_ALLOC_NOCREAT); | m = vm_page_grab(uobj, idx, VM_ALLOC_NOCREAT); | ||||
if (m != NULL) { | if (m != NULL) { | ||||
MPASS(vm_page_all_valid(m)); | MPASS(vm_page_all_valid(m)); | ||||
} 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; | ||||
vm_object_pip_add(uobj, 1); | |||||
VM_OBJECT_WUNLOCK(uobj); | |||||
rv = vm_pager_get_pages(uobj, &m, 1, NULL, | rv = vm_pager_get_pages(uobj, &m, 1, NULL, | ||||
NULL); | NULL); | ||||
VM_OBJECT_WLOCK(uobj); | |||||
vm_object_pip_wakeup(uobj); | |||||
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. | ||||
▲ Show 20 Lines • Show All 444 Lines • Show Last 20 Lines |