Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_object.c
Show First 20 Lines • Show All 2,024 Lines • ▼ Show 20 Lines | |||||
vm_object_populate(vm_object_t object, vm_pindex_t start, vm_pindex_t end) | vm_object_populate(vm_object_t object, vm_pindex_t start, vm_pindex_t end) | ||||
{ | { | ||||
vm_page_t m; | vm_page_t m; | ||||
vm_pindex_t pindex; | vm_pindex_t pindex; | ||||
int rv; | int rv; | ||||
VM_OBJECT_ASSERT_WLOCKED(object); | VM_OBJECT_ASSERT_WLOCKED(object); | ||||
for (pindex = start; pindex < end; pindex++) { | for (pindex = start; pindex < end; pindex++) { | ||||
m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL); | rv = vm_page_grab_valid(&m, object, pindex, VM_ALLOC_NORMAL); | ||||
if (m->valid != VM_PAGE_BITS_ALL) { | if (rv != VM_PAGER_OK) | ||||
rv = vm_pager_get_pages(object, &m, 1, NULL, NULL); | |||||
if (rv != VM_PAGER_OK) { | |||||
vm_page_lock(m); | |||||
vm_page_free(m); | |||||
vm_page_unlock(m); | |||||
break; | break; | ||||
} | |||||
} | |||||
/* | /* | ||||
* Keep "m" busy because a subsequent iteration may unlock | * Keep "m" busy because a subsequent iteration may unlock | ||||
* the object. | * the object. | ||||
*/ | */ | ||||
} | } | ||||
if (pindex > start) { | if (pindex > start) { | ||||
m = vm_page_lookup(object, start); | m = vm_page_lookup(object, start); | ||||
while (m != NULL && m->pindex < pindex) { | while (m != NULL && m->pindex < pindex) { | ||||
▲ Show 20 Lines • Show All 631 Lines • Show Last 20 Lines |