Lines Matching refs:cmap

775 	cow_map_t	*cmap = &sidp->sid_cowinfo->cow_map;  in snap_getchunk()  local
784 ASSERT(offset + len <= cmap->cmap_chunksz); in snap_getchunk()
789 if (chunk >= (cmap->cmap_bmsize * NBBY)) { in snap_getchunk()
799 if (isclr(cmap->cmap_candidate, chunk)) { in snap_getchunk()
813 rw_enter(&cmap->cmap_rwlock, RW_READER); in snap_getchunk()
814 if (isclr(cmap->cmap_hastrans, chunk)) { in snap_getchunk()
827 snapbuf->b_lblkno = lbtodb(chunk * cmap->cmap_chunksz + offset); in snap_getchunk()
869 rw_exit(&cmap->cmap_rwlock); in snap_getchunk()
882 cmn = transtbl_get(cmap, chunk); in snap_getchunk()
889 rw_exit(&cmap->cmap_rwlock); in snap_getchunk()
898 rw_exit(&cmap->cmap_rwlock); in snap_getchunk()
900 bf_index = chunk / cmap->cmap_chunksperbf; in snap_getchunk()
905 buffer, len, ((chunk % cmap->cmap_chunksperbf) * in snap_getchunk()
906 cmap->cmap_chunksz) + offset, UIO_SYSSPACE, 0, in snap_getchunk()
1189 transtbl_add(cow_map_t *cmap, chunknumber_t chunk, caddr_t buf) in transtbl_add() argument
1193 ASSERT(RW_WRITE_HELD(&cmap->cmap_rwlock)); in transtbl_add()
1204 cmnode->cmn_next = cmap->cmap_table; in transtbl_add()
1207 cmap->cmap_table = cmnode; in transtbl_add()
1220 transtbl_get(cow_map_t *cmap, chunknumber_t chunk) in transtbl_get() argument
1224 ASSERT(RW_READ_HELD(&cmap->cmap_rwlock)); in transtbl_get()
1225 ASSERT(cmap); in transtbl_get()
1228 for (cmn = cmap->cmap_table; cmn != NULL; cmn = cmn->cmn_next) { in transtbl_get()
1246 transtbl_delete(cow_map_t *cmap, cow_map_node_t *cmn) in transtbl_delete() argument
1248 ASSERT(RW_WRITE_HELD(&cmap->cmap_rwlock)); in transtbl_delete()
1250 ASSERT(cmap->cmap_table); in transtbl_delete()
1253 if (cmap->cmap_table == cmn) { in transtbl_delete()
1255 cmap->cmap_table = cmn->cmn_next; in transtbl_delete()
1273 kmem_free(cmn->cmn_buf, cmap->cmap_chunksz); in transtbl_delete()
1284 transtbl_free(cow_map_t *cmap) in transtbl_free() argument
1289 for (curnode = cmap->cmap_table; curnode != NULL; curnode = tempnode) { in transtbl_free()
1292 kmem_free(curnode->cmn_buf, cmap->cmap_chunksz); in transtbl_free()
1447 cow_map_t *cmap = &cowp->cow_map; in fssnap_translate() local
1456 startchunk = dbtocowchunk(cmap, wbp->b_lblkno); in fssnap_translate()
1457 endchunk = dbtocowchunk(cmap, wbp->b_lblkno + in fssnap_translate()
1513 if (cowchunk >= (cmap->cmap_bmsize * NBBY)) in fssnap_translate()
1522 if (isclr(cmap->cmap_candidate, cowchunk)) { in fssnap_translate()
1530 if (isset(cmap->cmap_hastrans, cowchunk)) { in fssnap_translate()
1545 if (sema_tryp(&cmap->cmap_throttle_sem) == 0) { in fssnap_translate()
1547 atomic_inc_32(&cmap->cmap_waiters); in fssnap_translate()
1548 sema_p(&cmap->cmap_throttle_sem); in fssnap_translate()
1549 atomic_dec_32(&cmap->cmap_waiters); in fssnap_translate()
1557 sema_v(&cmap->cmap_throttle_sem); in fssnap_translate()
1567 rw_enter(&cmap->cmap_rwlock, RW_WRITER); in fssnap_translate()
1568 if (isset(cmap->cmap_hastrans, cowchunk)) { in fssnap_translate()
1570 sema_v(&cmap->cmap_throttle_sem); in fssnap_translate()
1571 rw_exit(&cmap->cmap_rwlock); in fssnap_translate()
1580 oldbp->b_lblkno = cowchunktodb(cmap, cowchunk); in fssnap_translate()
1582 oldbp->b_bcount = cmap->cmap_chunksz; in fssnap_translate()
1583 oldbp->b_bufsize = cmap->cmap_chunksz; in fssnap_translate()
1587 oldbp->b_un.b_addr = kmem_alloc(cmap->cmap_chunksz, KM_SLEEP); in fssnap_translate()
1602 kmem_free(oldbp->b_un.b_addr, cmap->cmap_chunksz); in fssnap_translate()
1604 rw_exit(&cmap->cmap_rwlock); in fssnap_translate()
1606 sema_v(&cmap->cmap_throttle_sem); in fssnap_translate()
1614 cmn = transtbl_add(cmap, cowchunk, oldbp->b_un.b_addr); in fssnap_translate()
1624 setbit(cmap->cmap_hastrans, cowchunk); in fssnap_translate()
1626 rw_exit(&cmap->cmap_rwlock); in fssnap_translate()
1661 cow_map_t *cmap = &cowp->cow_map; in fssnap_write_taskq() local
1678 sema_v(&cmap->cmap_throttle_sem); in fssnap_write_taskq()
1683 atomic_inc_64((uint64_t *)&cmap->cmap_nchunks); in fssnap_write_taskq()
1685 if ((cmap->cmap_maxsize != 0) && in fssnap_write_taskq()
1686 ((cmap->cmap_nchunks * cmap->cmap_chunksz) > cmap->cmap_maxsize)) { in fssnap_write_taskq()
1691 cmap->cmap_maxsize); in fssnap_write_taskq()
1693 sema_v(&cmap->cmap_throttle_sem); in fssnap_write_taskq()
1699 bf_index = cmn->cmn_chunk / cmap->cmap_chunksperbf; in fssnap_write_taskq()
1702 cmn->cmn_buf, cmap->cmap_chunksz, in fssnap_write_taskq()
1703 (cmn->cmn_chunk % cmap->cmap_chunksperbf) * cmap->cmap_chunksz, in fssnap_write_taskq()
1709 cmn->cmn_chunk * cmap->cmap_chunksz, error); in fssnap_write_taskq()
1711 sema_v(&cmap->cmap_throttle_sem); in fssnap_write_taskq()
1719 rw_enter(&cmap->cmap_rwlock, RW_WRITER); in fssnap_write_taskq()
1720 transtbl_delete(cmap, cmn); in fssnap_write_taskq()
1721 rw_exit(&cmap->cmap_rwlock); in fssnap_write_taskq()
1725 sema_v(&cmap->cmap_throttle_sem); in fssnap_write_taskq()
1754 struct cow_map *cmap; in fssnap_create_impl() local
1853 cmap = &cowp->cow_map; in fssnap_create_impl()
1854 rw_init(&cmap->cmap_rwlock, NULL, RW_DEFAULT, NULL); in fssnap_create_impl()
1855 rw_enter(&cmap->cmap_rwlock, RW_WRITER); in fssnap_create_impl()
1857 sema_init(&cmap->cmap_throttle_sem, fssnap_max_mem_chunks, NULL, in fssnap_create_impl()
1860 cmap->cmap_chunksz = chunksz; in fssnap_create_impl()
1861 cmap->cmap_maxsize = maxsize; in fssnap_create_impl()
1862 cmap->cmap_chunksperbf = max_backfile_size / chunksz; in fssnap_create_impl()
1867 cmap->cmap_bmsize = (nchunks + (NBBY - 1)) / NBBY; in fssnap_create_impl()
1868 cmap->cmap_hastrans = kmem_zalloc(cmap->cmap_bmsize, KM_SLEEP); in fssnap_create_impl()
1869 cmap->cmap_candidate = kmem_zalloc(cmap->cmap_bmsize, KM_SLEEP); in fssnap_create_impl()
1902 struct cow_map *cmap = &cowp->cow_map; in fssnap_set_candidate_impl() local
1905 ASSERT(chunknumber < (cmap->cmap_bmsize * NBBY)); in fssnap_set_candidate_impl()
1906 setbit(cmap->cmap_candidate, chunknumber); in fssnap_set_candidate_impl()
1922 struct cow_map *cmap = &cowp->cow_map; in fssnap_is_candidate_impl() local
1923 ulong_t chunknumber = off / cmap->cmap_chunksz; in fssnap_is_candidate_impl()
1926 ASSERT(chunknumber < (cmap->cmap_bmsize * NBBY)); in fssnap_is_candidate_impl()
1927 return (isset(cmap->cmap_candidate, chunknumber)); in fssnap_is_candidate_impl()
1943 struct cow_map *cmap; in fssnap_create_done_impl() local
1953 cmap = &cowp->cow_map; in fssnap_create_done_impl()
1955 ASSERT(RW_WRITE_HELD(&cmap->cmap_rwlock)); in fssnap_create_done_impl()
1993 rw_exit(&cmap->cmap_rwlock); in fssnap_create_done_impl()
2025 struct cow_map *cmap; in fssnap_delete_impl() local
2099 cmap = &cowp->cow_map; in fssnap_delete_impl()
2100 ASSERT(cmap); in fssnap_delete_impl()
2102 if (cmap->cmap_candidate) in fssnap_delete_impl()
2103 kmem_free(cmap->cmap_candidate, cmap->cmap_bmsize); in fssnap_delete_impl()
2105 if (cmap->cmap_hastrans) in fssnap_delete_impl()
2106 kmem_free(cmap->cmap_hastrans, cmap->cmap_bmsize); in fssnap_delete_impl()
2108 if (cmap->cmap_table) in fssnap_delete_impl()
2111 rw_destroy(&cmap->cmap_rwlock); in fssnap_delete_impl()
2113 while (cmap->cmap_waiters) { in fssnap_delete_impl()
2114 sema_p(&cmap->cmap_throttle_sem); in fssnap_delete_impl()
2115 sema_v(&cmap->cmap_throttle_sem); in fssnap_delete_impl()
2117 sema_destroy(&cmap->cmap_throttle_sem); in fssnap_delete_impl()