Lines Matching full:zap
51 #include <sys/zap.h>
56 * If zap_iterate_prefetch is set, we will prefetch the entire ZAP object
72 * Given that the ZAP entries aren't returned in a specific order, the only
86 * Enable ZAP shrinking. When enabled, empty sibling leaf blocks will be
93 static uint64_t zap_allocate_blocks(zap_t *zap, int nblocks);
110 fzap_upgrade(zap_t *zap, dmu_tx_t *tx, zap_flags_t flags) in fzap_upgrade() argument
112 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in fzap_upgrade()
113 zap->zap_ismicro = FALSE; in fzap_upgrade()
115 zap->zap_dbu.dbu_evict_func_sync = zap_evict_sync; in fzap_upgrade()
116 zap->zap_dbu.dbu_evict_func_async = NULL; in fzap_upgrade()
118 mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, MUTEX_DEFAULT, 0); in fzap_upgrade()
119 zap->zap_f.zap_block_shift = highbit64(zap->zap_dbuf->db_size) - 1; in fzap_upgrade()
121 zap_phys_t *zp = zap_f_phys(zap); in fzap_upgrade()
126 memset(zap->zap_dbuf->db_data, 0, zap->zap_dbuf->db_size); in fzap_upgrade()
130 zp->zap_ptrtbl.zt_shift = ZAP_EMBEDDED_PTRTBL_SHIFT(zap); in fzap_upgrade()
135 zp->zap_salt = zap->zap_salt; in fzap_upgrade()
136 zp->zap_normflags = zap->zap_normflags; in fzap_upgrade()
141 ZAP_EMBEDDED_PTRTBL_ENT(zap, i) = 1; in fzap_upgrade()
147 VERIFY0(dmu_buf_hold_by_dnode(zap->zap_dnode, in fzap_upgrade()
148 1<<FZAP_BLOCK_SHIFT(zap), FTAG, &db, DMU_READ_NO_PREFETCH)); in fzap_upgrade()
161 zap_tryupgradedir(zap_t *zap, dmu_tx_t *tx) in zap_tryupgradedir() argument
163 if (RW_WRITE_HELD(&zap->zap_rwlock)) in zap_tryupgradedir()
165 if (rw_tryupgrade(&zap->zap_rwlock)) { in zap_tryupgradedir()
166 dmu_buf_will_dirty(zap->zap_dbuf, tx); in zap_tryupgradedir()
177 zap_table_grow(zap_t *zap, zap_table_phys_t *tbl, in zap_table_grow() argument
182 int bs = FZAP_BLOCK_SHIFT(zap); in zap_table_grow()
186 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in zap_table_grow()
193 newblk = zap_allocate_blocks(zap, tbl->zt_numblks * 2); in zap_table_grow()
196 dmu_prefetch_by_dnode(zap->zap_dnode, 0, in zap_table_grow()
207 int err = dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_table_grow()
214 VERIFY0(dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_table_grow()
221 VERIFY0(dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_table_grow()
237 (void) dmu_free_range(zap->zap_objset, zap->zap_object, in zap_table_grow()
254 zap_table_store(zap_t *zap, zap_table_phys_t *tbl, uint64_t idx, uint64_t val, in zap_table_store() argument
257 int bs = FZAP_BLOCK_SHIFT(zap); in zap_table_store()
259 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in zap_table_store()
269 int err = dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_table_store()
281 err = dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_table_store()
301 zap_table_load(zap_t *zap, zap_table_phys_t *tbl, uint64_t idx, uint64_t *valp) in zap_table_load() argument
303 int bs = FZAP_BLOCK_SHIFT(zap); in zap_table_load()
305 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in zap_table_load()
311 int err = dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_table_load()
326 err = dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_table_load()
350 zap_grow_ptrtbl(zap_t *zap, dmu_tx_t *tx) in zap_grow_ptrtbl() argument
358 if (zap_f_phys(zap)->zap_ptrtbl.zt_shift >= zap_hashbits(zap) - 2) in zap_grow_ptrtbl()
361 if (zap_f_phys(zap)->zap_ptrtbl.zt_numblks == 0) { in zap_grow_ptrtbl()
367 ASSERT3U(zap_f_phys(zap)->zap_ptrtbl.zt_shift, ==, in zap_grow_ptrtbl()
368 ZAP_EMBEDDED_PTRTBL_SHIFT(zap)); in zap_grow_ptrtbl()
369 ASSERT0(zap_f_phys(zap)->zap_ptrtbl.zt_blk); in zap_grow_ptrtbl()
371 uint64_t newblk = zap_allocate_blocks(zap, 1); in zap_grow_ptrtbl()
373 int err = dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_grow_ptrtbl()
374 newblk << FZAP_BLOCK_SHIFT(zap), FTAG, &db_new, in zap_grow_ptrtbl()
379 zap_ptrtbl_transfer(&ZAP_EMBEDDED_PTRTBL_ENT(zap, 0), in zap_grow_ptrtbl()
380 db_new->db_data, 1 << ZAP_EMBEDDED_PTRTBL_SHIFT(zap)); in zap_grow_ptrtbl()
383 zap_f_phys(zap)->zap_ptrtbl.zt_blk = newblk; in zap_grow_ptrtbl()
384 zap_f_phys(zap)->zap_ptrtbl.zt_numblks = 1; in zap_grow_ptrtbl()
385 zap_f_phys(zap)->zap_ptrtbl.zt_shift++; in zap_grow_ptrtbl()
387 ASSERT3U(1ULL << zap_f_phys(zap)->zap_ptrtbl.zt_shift, ==, in zap_grow_ptrtbl()
388 zap_f_phys(zap)->zap_ptrtbl.zt_numblks << in zap_grow_ptrtbl()
389 (FZAP_BLOCK_SHIFT(zap)-3)); in zap_grow_ptrtbl()
393 return (zap_table_grow(zap, &zap_f_phys(zap)->zap_ptrtbl, in zap_grow_ptrtbl()
399 zap_increment_num_entries(zap_t *zap, int delta, dmu_tx_t *tx) in zap_increment_num_entries() argument
401 dmu_buf_will_dirty(zap->zap_dbuf, tx); in zap_increment_num_entries()
402 mutex_enter(&zap->zap_f.zap_num_entries_mtx); in zap_increment_num_entries()
403 ASSERT(delta > 0 || zap_f_phys(zap)->zap_num_entries >= -delta); in zap_increment_num_entries()
404 zap_f_phys(zap)->zap_num_entries += delta; in zap_increment_num_entries()
405 mutex_exit(&zap->zap_f.zap_num_entries_mtx); in zap_increment_num_entries()
409 zap_allocate_blocks(zap_t *zap, int nblocks) in zap_allocate_blocks() argument
411 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in zap_allocate_blocks()
412 uint64_t newblk = zap_f_phys(zap)->zap_freeblk; in zap_allocate_blocks()
413 zap_f_phys(zap)->zap_freeblk += nblocks; in zap_allocate_blocks()
427 zap_create_leaf(zap_t *zap, dmu_tx_t *tx) in zap_create_leaf() argument
429 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in zap_create_leaf()
431 uint64_t blkid = zap_allocate_blocks(zap, 1); in zap_create_leaf()
434 VERIFY0(dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_create_leaf()
435 blkid << FZAP_BLOCK_SHIFT(zap), NULL, &db, in zap_create_leaf()
439 * Create the leaf structure and stash it on the dbuf. If zap was in zap_create_leaf()
461 zap_leaf_init(l, zap->zap_normflags != 0); in zap_create_leaf()
463 zap_f_phys(zap)->zap_num_leafs++; in zap_create_leaf()
469 fzap_count(zap_t *zap, uint64_t *count) in fzap_count() argument
471 ASSERT(!zap->zap_ismicro); in fzap_count()
472 mutex_enter(&zap->zap_f.zap_num_entries_mtx); /* unnecessary */ in fzap_count()
473 *count = zap_f_phys(zap)->zap_num_entries; in fzap_count()
474 mutex_exit(&zap->zap_f.zap_num_entries_mtx); in fzap_count()
536 zap_get_leaf_byblk(zap_t *zap, uint64_t blkid, dmu_tx_t *tx, krw_t lt, in zap_get_leaf_byblk() argument
541 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in zap_get_leaf_byblk()
553 int bs = FZAP_BLOCK_SHIFT(zap); in zap_get_leaf_byblk()
554 int err = dmu_buf_hold_by_dnode(zap->zap_dnode, in zap_get_leaf_byblk()
559 ASSERT3U(db->db_object, ==, zap->zap_object); in zap_get_leaf_byblk()
586 zap_idx_to_blk(zap_t *zap, uint64_t idx, uint64_t *valp) in zap_idx_to_blk() argument
588 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in zap_idx_to_blk()
590 if (zap_f_phys(zap)->zap_ptrtbl.zt_numblks == 0) { in zap_idx_to_blk()
592 (1ULL << zap_f_phys(zap)->zap_ptrtbl.zt_shift)); in zap_idx_to_blk()
593 *valp = ZAP_EMBEDDED_PTRTBL_ENT(zap, idx); in zap_idx_to_blk()
596 return (zap_table_load(zap, &zap_f_phys(zap)->zap_ptrtbl, in zap_idx_to_blk()
602 zap_set_idx_to_blk(zap_t *zap, uint64_t idx, uint64_t blk, dmu_tx_t *tx) in zap_set_idx_to_blk() argument
605 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in zap_set_idx_to_blk()
607 if (zap_f_phys(zap)->zap_ptrtbl.zt_blk == 0) { in zap_set_idx_to_blk()
608 ZAP_EMBEDDED_PTRTBL_ENT(zap, idx) = blk; in zap_set_idx_to_blk()
611 return (zap_table_store(zap, &zap_f_phys(zap)->zap_ptrtbl, in zap_set_idx_to_blk()
617 zap_set_idx_range_to_blk(zap_t *zap, uint64_t idx, uint64_t nptrs, uint64_t blk, in zap_set_idx_range_to_blk() argument
620 int bs = FZAP_BLOCK_SHIFT(zap); in zap_set_idx_range_to_blk()
625 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in zap_set_idx_range_to_blk()
632 err = zap_idx_to_blk(zap, idx + i, &blk); in zap_set_idx_range_to_blk()
639 err = zap_set_idx_to_blk(zap, idx + i, blk, tx); in zap_set_idx_range_to_blk()
651 * Each leaf has single range of entries (block pointers) in the ZAP ptrtbl.
658 check_sibling_ptrtbl_range(zap_t *zap, uint64_t prefix, uint64_t prefix_len) in check_sibling_ptrtbl_range() argument
660 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in check_sibling_ptrtbl_range()
663 uint64_t idx = ZAP_HASH_IDX(h, zap_f_phys(zap)->zap_ptrtbl.zt_shift); in check_sibling_ptrtbl_range()
664 uint64_t pref_diff = zap_f_phys(zap)->zap_ptrtbl.zt_shift - prefix_len; in check_sibling_ptrtbl_range()
669 ASSERT3U(idx+nptrs, <=, (1UL << zap_f_phys(zap)->zap_ptrtbl.zt_shift)); in check_sibling_ptrtbl_range()
671 if (zap_idx_to_blk(zap, idx, &first) != 0) in check_sibling_ptrtbl_range()
674 if (zap_idx_to_blk(zap, idx + nptrs - 1, &last) != 0) in check_sibling_ptrtbl_range()
683 zap_deref_leaf(zap_t *zap, uint64_t h, dmu_tx_t *tx, krw_t lt, zap_leaf_t **lp) in zap_deref_leaf() argument
687 ASSERT(zap->zap_dbuf == NULL || in zap_deref_leaf()
688 zap_f_phys(zap) == zap->zap_dbuf->db_data); in zap_deref_leaf()
690 /* Reality check for corrupt zap objects (leaf or header). */ in zap_deref_leaf()
691 if ((zap_f_phys(zap)->zap_block_type != ZBT_LEAF && in zap_deref_leaf()
692 zap_f_phys(zap)->zap_block_type != ZBT_HEADER) || in zap_deref_leaf()
693 zap_f_phys(zap)->zap_magic != ZAP_MAGIC) { in zap_deref_leaf()
697 uint64_t idx = ZAP_HASH_IDX(h, zap_f_phys(zap)->zap_ptrtbl.zt_shift); in zap_deref_leaf()
698 int err = zap_idx_to_blk(zap, idx, &blk); in zap_deref_leaf()
701 err = zap_get_leaf_byblk(zap, blk, tx, lt, lp); in zap_deref_leaf()
713 zap_t *zap = zn->zn_zap; in zap_expand_leaf() local
718 ASSERT3U(old_prefix_len, <=, zap_f_phys(zap)->zap_ptrtbl.zt_shift); in zap_expand_leaf()
719 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in zap_expand_leaf()
724 if (zap_tryupgradedir(zap, tx) == 0 || in zap_expand_leaf()
725 old_prefix_len == zap_f_phys(zap)->zap_ptrtbl.zt_shift) { in zap_expand_leaf()
727 objset_t *os = zap->zap_objset; in zap_expand_leaf()
728 uint64_t object = zap->zap_object; in zap_expand_leaf()
732 zap_unlockdir(zap, tag); in zap_expand_leaf()
735 zap = zn->zn_zap; in zap_expand_leaf()
738 ASSERT(!zap->zap_ismicro); in zap_expand_leaf()
741 zap_f_phys(zap)->zap_ptrtbl.zt_shift) { in zap_expand_leaf()
742 err = zap_grow_ptrtbl(zap, tx); in zap_expand_leaf()
747 err = zap_deref_leaf(zap, hash, tx, RW_WRITER, &l); in zap_expand_leaf()
757 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in zap_expand_leaf()
758 ASSERT3U(old_prefix_len, <, zap_f_phys(zap)->zap_ptrtbl.zt_shift); in zap_expand_leaf()
762 int prefix_diff = zap_f_phys(zap)->zap_ptrtbl.zt_shift - in zap_expand_leaf()
770 err = zap_idx_to_blk(zap, sibling + i, &blk); in zap_expand_leaf()
776 zap_leaf_t *nl = zap_create_leaf(zap, tx); in zap_expand_leaf()
777 zap_leaf_split(l, nl, zap->zap_normflags != 0); in zap_expand_leaf()
781 err = zap_set_idx_to_blk(zap, sibling + i, nl->l_blkid, tx); in zap_expand_leaf()
803 zap_t *zap = zn->zn_zap; in zap_put_leaf_maybe_grow_ptrtbl() local
804 int shift = zap_f_phys(zap)->zap_ptrtbl.zt_shift; in zap_put_leaf_maybe_grow_ptrtbl()
810 if (leaffull || zap_f_phys(zap)->zap_ptrtbl.zt_nextblk) { in zap_put_leaf_maybe_grow_ptrtbl()
815 if (zap_tryupgradedir(zap, tx) == 0) { in zap_put_leaf_maybe_grow_ptrtbl()
816 objset_t *os = zap->zap_objset; in zap_put_leaf_maybe_grow_ptrtbl()
817 uint64_t zapobj = zap->zap_object; in zap_put_leaf_maybe_grow_ptrtbl()
819 zap_unlockdir(zap, tag); in zap_put_leaf_maybe_grow_ptrtbl()
822 zap = zn->zn_zap; in zap_put_leaf_maybe_grow_ptrtbl()
828 if (zap_f_phys(zap)->zap_ptrtbl.zt_shift == shift) in zap_put_leaf_maybe_grow_ptrtbl()
829 (void) zap_grow_ptrtbl(zap, tx); in zap_put_leaf_maybe_grow_ptrtbl()
838 /* Only allow directory zap to have longname */ in fzap_checkname()
920 zap_t *zap = zn->zn_zap; in fzap_add_cd() local
922 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in fzap_add_cd()
923 ASSERT(!zap->zap_ismicro); in fzap_add_cd()
926 err = zap_deref_leaf(zap, zn->zn_hash, tx, RW_WRITER, &l); in fzap_add_cd()
942 zap_increment_num_entries(zap, 1, tx); in fzap_add_cd()
945 zap = zn->zn_zap; /* zap_expand_leaf() may change zap */ in fzap_add_cd()
982 zap_t *zap = zn->zn_zap; in fzap_update() local
984 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in fzap_update()
989 err = zap_deref_leaf(zap, zn->zn_hash, tx, RW_WRITER, &l); in fzap_update()
1001 zap_increment_num_entries(zap, 1, tx); in fzap_update()
1008 zap = zn->zn_zap; /* zap_expand_leaf() may change zap */ in fzap_update()
1073 zap_t *zap = zn->zn_zap; in fzap_prefetch() local
1076 zap_f_phys(zap)->zap_ptrtbl.zt_shift); in fzap_prefetch()
1077 if (zap_idx_to_blk(zap, idx, &blk) != 0) in fzap_prefetch()
1079 int bs = FZAP_BLOCK_SHIFT(zap); in fzap_prefetch()
1080 dmu_prefetch_by_dnode(zap->zap_dnode, 0, blk << bs, 1 << bs, in fzap_prefetch()
1305 fzap_cursor_retrieve(zap_t *zap, zap_cursor_t *zc, zap_attribute_t *za) in fzap_cursor_retrieve() argument
1316 * iterate over the entire ZAP object. If there are multiple leaf in fzap_cursor_retrieve()
1323 zc->zc_prefetch && zap_f_phys(zap)->zap_freeblk > 2) { in fzap_cursor_retrieve()
1324 dmu_prefetch_by_dnode(zap->zap_dnode, 0, 0, in fzap_cursor_retrieve()
1325 zap_f_phys(zap)->zap_freeblk << FZAP_BLOCK_SHIFT(zap), in fzap_cursor_retrieve()
1346 err = zap_deref_leaf(zap, zc->zc_hash, NULL, RW_READER, in fzap_cursor_retrieve()
1387 err = zap_entry_read_name(zap, &zeh, in fzap_cursor_retrieve()
1393 NULL, za->za_name, zap); in fzap_cursor_retrieve()
1400 zap_stats_ptrtbl(zap_t *zap, uint64_t *tbl, int len, zap_stats_t *zs) in zap_stats_ptrtbl() argument
1416 int err = zap_get_leaf_byblk(zap, tbl[i], NULL, RW_READER, &l); in zap_stats_ptrtbl()
1418 zap_leaf_stats(zap, l, zs); in zap_stats_ptrtbl()
1425 fzap_get_stats(zap_t *zap, zap_stats_t *zs) in fzap_get_stats() argument
1427 int bs = FZAP_BLOCK_SHIFT(zap); in fzap_get_stats()
1433 zs->zs_num_leafs = zap_f_phys(zap)->zap_num_leafs; in fzap_get_stats()
1434 zs->zs_num_entries = zap_f_phys(zap)->zap_num_entries; in fzap_get_stats()
1435 zs->zs_num_blocks = zap_f_phys(zap)->zap_freeblk; in fzap_get_stats()
1436 zs->zs_block_type = zap_f_phys(zap)->zap_block_type; in fzap_get_stats()
1437 zs->zs_magic = zap_f_phys(zap)->zap_magic; in fzap_get_stats()
1438 zs->zs_salt = zap_f_phys(zap)->zap_salt; in fzap_get_stats()
1443 zs->zs_ptrtbl_len = 1ULL << zap_f_phys(zap)->zap_ptrtbl.zt_shift; in fzap_get_stats()
1444 zs->zs_ptrtbl_nextblk = zap_f_phys(zap)->zap_ptrtbl.zt_nextblk; in fzap_get_stats()
1446 zap_f_phys(zap)->zap_ptrtbl.zt_blks_copied; in fzap_get_stats()
1447 zs->zs_ptrtbl_zt_blk = zap_f_phys(zap)->zap_ptrtbl.zt_blk; in fzap_get_stats()
1448 zs->zs_ptrtbl_zt_numblks = zap_f_phys(zap)->zap_ptrtbl.zt_numblks; in fzap_get_stats()
1449 zs->zs_ptrtbl_zt_shift = zap_f_phys(zap)->zap_ptrtbl.zt_shift; in fzap_get_stats()
1451 if (zap_f_phys(zap)->zap_ptrtbl.zt_numblks == 0) { in fzap_get_stats()
1453 zap_stats_ptrtbl(zap, &ZAP_EMBEDDED_PTRTBL_ENT(zap, 0), in fzap_get_stats()
1454 1 << ZAP_EMBEDDED_PTRTBL_SHIFT(zap), zs); in fzap_get_stats()
1456 dmu_prefetch_by_dnode(zap->zap_dnode, 0, in fzap_get_stats()
1457 zap_f_phys(zap)->zap_ptrtbl.zt_blk << bs, in fzap_get_stats()
1458 zap_f_phys(zap)->zap_ptrtbl.zt_numblks << bs, in fzap_get_stats()
1461 for (int b = 0; b < zap_f_phys(zap)->zap_ptrtbl.zt_numblks; in fzap_get_stats()
1466 err = dmu_buf_hold_by_dnode(zap->zap_dnode, in fzap_get_stats()
1467 (zap_f_phys(zap)->zap_ptrtbl.zt_blk + b) << bs, in fzap_get_stats()
1470 zap_stats_ptrtbl(zap, db->db_data, in fzap_get_stats()
1482 zap_trunc(zap_t *zap) in zap_trunc() argument
1487 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in zap_trunc()
1489 if (zap_f_phys(zap)->zap_ptrtbl.zt_blk > 0) { in zap_trunc()
1491 nentries = (1 << zap_f_phys(zap)->zap_ptrtbl.zt_shift); in zap_trunc()
1492 lastblk = zap_f_phys(zap)->zap_ptrtbl.zt_blk + in zap_trunc()
1493 zap_f_phys(zap)->zap_ptrtbl.zt_numblks - 1; in zap_trunc()
1496 nentries = (1 << ZAP_EMBEDDED_PTRTBL_SHIFT(zap)); in zap_trunc()
1502 if (zap_idx_to_blk(zap, idx, &blk) != 0) in zap_trunc()
1508 ASSERT3U(lastblk, <, zap_f_phys(zap)->zap_freeblk); in zap_trunc()
1510 zap_f_phys(zap)->zap_freeblk = lastblk + 1; in zap_trunc()
1514 * ZAP shrinking algorithm.
1516 * We shrink ZAP recuresively removing empty leaves. We can remove an empty leaf
1541 zap_t *zap = zn->zn_zap; in zap_shrink() local
1542 int64_t zt_shift = zap_f_phys(zap)->zap_ptrtbl.zt_shift; in zap_shrink()
1550 ASSERT3U(prefix_len, <=, zap_f_phys(zap)->zap_ptrtbl.zt_shift); in zap_shrink()
1551 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in zap_shrink()
1572 if (check_sibling_ptrtbl_range(zap, sl_prefix, prefix_len) == 0) in zap_shrink()
1586 if ((err = zap_deref_leaf(zap, sl_hash, tx, RW_READER, in zap_shrink()
1605 * we need to lock ZAP ptrtbl as WRITER. in zap_shrink()
1607 if (!writer && (writer = zap_tryupgradedir(zap, tx)) == 0) { in zap_shrink()
1620 rw_exit(&zap->zap_rwlock); in zap_shrink()
1621 rw_enter(&zap->zap_rwlock, RW_WRITER); in zap_shrink()
1622 dmu_buf_will_dirty(zap->zap_dbuf, tx); in zap_shrink()
1624 zt_shift = zap_f_phys(zap)->zap_ptrtbl.zt_shift; in zap_shrink()
1636 if ((err = zap_deref_leaf(zap, (slbit ? sl_hash : hash), in zap_shrink()
1650 if ((err = zap_deref_leaf(zap, (slbit ? hash : sl_hash), tx, in zap_shrink()
1672 if ((err = zap_set_idx_range_to_blk(zap, idx, nptrs, l->l_blkid, in zap_shrink()
1681 int bs = FZAP_BLOCK_SHIFT(zap); in zap_shrink()
1682 if (sl_blkid == zap_f_phys(zap)->zap_freeblk - 1) in zap_shrink()
1685 (void) dmu_free_range(zap->zap_objset, zap->zap_object, in zap_shrink()
1689 zap_f_phys(zap)->zap_num_leafs--; in zap_shrink()
1702 zap_trunc(zap); in zap_shrink()
1711 "When iterating ZAP object, prefetch it");
1714 "Enable ZAP shrinking");