| 422 | } |
| 423 | |
| 424 | static zap_leaf_t * |
| 425 | zap_create_leaf(zap_t *zap, dmu_tx_t *tx) |
| 426 | { |
| 427 | zap_leaf_t *l = kmem_zalloc(sizeof (zap_leaf_t), KM_SLEEP); |
| 428 | |
| 429 | ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); |
| 430 | |
| 431 | rw_init(&l->l_rwlock, NULL, RW_NOLOCKDEP, NULL); |
| 432 | rw_enter(&l->l_rwlock, RW_WRITER); |
| 433 | l->l_blkid = zap_allocate_blocks(zap, 1); |
| 434 | l->l_dbuf = NULL; |
| 435 | |
| 436 | VERIFY0(dmu_buf_hold(zap->zap_objset, zap->zap_object, |
| 437 | l->l_blkid << FZAP_BLOCK_SHIFT(zap), NULL, &l->l_dbuf, |
| 438 | DMU_READ_NO_PREFETCH)); |
| 439 | dmu_buf_init_user(&l->l_dbu, zap_leaf_evict_sync, NULL, &l->l_dbuf); |
| 440 | VERIFY3P(NULL, ==, dmu_buf_set_user(l->l_dbuf, &l->l_dbu)); |
| 441 | dmu_buf_will_dirty(l->l_dbuf, tx); |
| 442 | |
| 443 | zap_leaf_init(l, zap->zap_normflags != 0); |
| 444 | |
| 445 | zap_f_phys(zap)->zap_num_leafs++; |
| 446 | |
| 447 | return (l); |
| 448 | } |
| 449 | |
| 450 | int |
| 451 | fzap_count(zap_t *zap, uint64_t *count) |
no test coverage detected