Changeset View
Changeset View
Standalone View
Standalone View
head/sys/compat/linuxkpi/common/src/linux_page.c
Show First 20 Lines • Show All 311 Lines • ▼ Show 20 Lines | linux_shmem_read_mapping_page_gfp(vm_object_t obj, int pindex, gfp_t gfp) | ||||
page = vm_page_grab(obj, pindex, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | page = vm_page_grab(obj, pindex, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | | ||||
VM_ALLOC_WIRED); | VM_ALLOC_WIRED); | ||||
if (page->valid != VM_PAGE_BITS_ALL) { | if (page->valid != VM_PAGE_BITS_ALL) { | ||||
vm_page_xbusy(page); | vm_page_xbusy(page); | ||||
if (vm_pager_has_page(obj, pindex, NULL, NULL)) { | if (vm_pager_has_page(obj, pindex, NULL, NULL)) { | ||||
rv = vm_pager_get_pages(obj, &page, 1, NULL, NULL); | rv = vm_pager_get_pages(obj, &page, 1, NULL, NULL); | ||||
if (rv != VM_PAGER_OK) { | if (rv != VM_PAGER_OK) { | ||||
vm_page_lock(page); | vm_page_lock(page); | ||||
vm_page_unwire(page, PQ_NONE); | vm_page_unwire_noq(page); | ||||
vm_page_free(page); | vm_page_free(page); | ||||
vm_page_unlock(page); | vm_page_unlock(page); | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
return (ERR_PTR(-EINVAL)); | return (ERR_PTR(-EINVAL)); | ||||
} | } | ||||
MPASS(page->valid == VM_PAGE_BITS_ALL); | MPASS(page->valid == VM_PAGE_BITS_ALL); | ||||
} else { | } else { | ||||
pmap_zero_page(page); | pmap_zero_page(page); | ||||
▲ Show 20 Lines • Show All 73 Lines • Show Last 20 Lines |