Changeset View
Changeset View
Standalone View
Standalone View
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
Show First 20 Lines • Show All 539 Lines • ▼ Show 20 Lines | if (vm_page_none_valid(pp)) { | ||||
error = dmu_read(os, zp->z_id, start, bytes, va, | error = dmu_read(os, zp->z_id, start, bytes, va, | ||||
DMU_READ_PREFETCH); | DMU_READ_PREFETCH); | ||||
if (bytes != PAGESIZE && error == 0) | if (bytes != PAGESIZE && error == 0) | ||||
bzero(va + bytes, PAGESIZE - bytes); | bzero(va + bytes, PAGESIZE - bytes); | ||||
zfs_unmap_page(sf); | zfs_unmap_page(sf); | ||||
zfs_vmobject_wlock(obj); | zfs_vmobject_wlock(obj); | ||||
if (error == 0) { | if (error == 0) { | ||||
vm_page_valid(pp); | vm_page_valid(pp); | ||||
vm_page_lock(pp); | |||||
vm_page_activate(pp); | vm_page_activate(pp); | ||||
vm_page_unlock(pp); | |||||
} | } | ||||
vm_page_sunbusy(pp); | vm_page_sunbusy(pp); | ||||
if (error != 0 && !vm_page_wired(pp) && | if (error != 0 && !vm_page_wired(pp) && | ||||
pp->valid == 0 && vm_page_tryxbusy(pp)) | pp->valid == 0 && vm_page_tryxbusy(pp)) | ||||
vm_page_free(pp); | vm_page_free(pp); | ||||
} else { | } else { | ||||
ASSERT3U(pp->valid, ==, VM_PAGE_BITS_ALL); | ASSERT3U(pp->valid, ==, VM_PAGE_BITS_ALL); | ||||
vm_page_sunbusy(pp); | vm_page_sunbusy(pp); | ||||
▲ Show 20 Lines • Show All 5,471 Lines • Show Last 20 Lines |