Changeset View
Changeset View
Standalone View
Standalone View
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
Show First 20 Lines • Show All 1,755 Lines • ▼ Show 20 Lines | for (i = 0; i < *rbehind; i++) { | ||||
ASSERT(!pmap_page_is_mapped(m)); | ASSERT(!pmap_page_is_mapped(m)); | ||||
ASSERT(db->db_size > PAGE_SIZE); | ASSERT(db->db_size > PAGE_SIZE); | ||||
bufoff = IDX_TO_OFF(m->pindex) % db->db_size; | bufoff = IDX_TO_OFF(m->pindex) % db->db_size; | ||||
va = zfs_map_page(m, &sf); | va = zfs_map_page(m, &sf); | ||||
bcopy((char *)db->db_data + bufoff, va, PAGESIZE); | bcopy((char *)db->db_data + bufoff, va, PAGESIZE); | ||||
zfs_unmap_page(sf); | zfs_unmap_page(sf); | ||||
vm_page_valid(m); | vm_page_valid(m); | ||||
vm_page_lock(m); | |||||
if ((m->busy_lock & VPB_BIT_WAITERS) != 0) | if ((m->busy_lock & VPB_BIT_WAITERS) != 0) | ||||
vm_page_activate(m); | vm_page_activate(m); | ||||
else | else | ||||
vm_page_deactivate(m); | vm_page_deactivate(m); | ||||
vm_page_unlock(m); | |||||
vm_page_sunbusy(m); | vm_page_sunbusy(m); | ||||
} | } | ||||
*rbehind = i; | *rbehind = i; | ||||
bufoff = IDX_TO_OFF(ma[0]->pindex) % db->db_size; | bufoff = IDX_TO_OFF(ma[0]->pindex) % db->db_size; | ||||
pgoff = 0; | pgoff = 0; | ||||
for (mi = 0, di = 0; mi < count && di < numbufs; ) { | for (mi = 0, di = 0; mi < count && di < numbufs; ) { | ||||
if (pgoff == 0) { | if (pgoff == 0) { | ||||
▲ Show 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | for (i = 0; i < *rahead; i++) { | ||||
bcopy((char *)db->db_data + bufoff, va, tocpy); | bcopy((char *)db->db_data + bufoff, va, tocpy); | ||||
if (tocpy < PAGESIZE) { | if (tocpy < PAGESIZE) { | ||||
ASSERT(i == *rahead - 1); | ASSERT(i == *rahead - 1); | ||||
ASSERT((db->db_size & PAGE_MASK) != 0); | ASSERT((db->db_size & PAGE_MASK) != 0); | ||||
bzero(va + tocpy, PAGESIZE - tocpy); | bzero(va + tocpy, PAGESIZE - tocpy); | ||||
} | } | ||||
zfs_unmap_page(sf); | zfs_unmap_page(sf); | ||||
vm_page_valid(m); | vm_page_valid(m); | ||||
vm_page_lock(m); | |||||
if ((m->busy_lock & VPB_BIT_WAITERS) != 0) | if ((m->busy_lock & VPB_BIT_WAITERS) != 0) | ||||
vm_page_activate(m); | vm_page_activate(m); | ||||
else | else | ||||
vm_page_deactivate(m); | vm_page_deactivate(m); | ||||
vm_page_unlock(m); | |||||
vm_page_sunbusy(m); | vm_page_sunbusy(m); | ||||
} | } | ||||
*rahead = i; | *rahead = i; | ||||
zfs_vmobject_wunlock(vmobj); | zfs_vmobject_wunlock(vmobj); | ||||
dmu_buf_rele_array(dbp, numbufs, FTAG); | dmu_buf_rele_array(dbp, numbufs, FTAG); | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 854 Lines • Show Last 20 Lines |