Lines Matching refs:zap

46 extern inline mzap_phys_t *zap_m_phys(zap_t *zap);
52 zap_getflags(zap_t *zap) in zap_getflags() argument
54 if (zap->zap_ismicro) in zap_getflags()
56 return (zap_f_phys(zap)->zap_flags); in zap_getflags()
60 zap_hashbits(zap_t *zap) in zap_hashbits() argument
62 if (zap_getflags(zap) & ZAP_FLAG_HASH64) in zap_hashbits()
69 zap_maxcd(zap_t *zap) in zap_maxcd() argument
71 if (zap_getflags(zap) & ZAP_FLAG_HASH64) in zap_maxcd()
80 zap_t *zap = zn->zn_zap; in zap_hash() local
83 if (zap_getflags(zap) & ZAP_FLAG_PRE_HASHED_KEY) { in zap_hash()
84 ASSERT(zap_getflags(zap) & ZAP_FLAG_UINT64_KEY); in zap_hash()
87 h = zap->zap_salt; in zap_hash()
91 if (zap_getflags(zap) & ZAP_FLAG_UINT64_KEY) { in zap_hash()
130 h &= ~((1ULL << (64 - zap_hashbits(zap))) - 1); in zap_hash()
136 zap_normalize(zap_t *zap, const char *name, char *namenorm, int normflags) in zap_normalize() argument
138 ASSERT(!(zap_getflags(zap) & ZAP_FLAG_UINT64_KEY)); in zap_normalize()
176 zap_name_alloc(zap_t *zap, const char *key, matchtype_t mt) in zap_name_alloc() argument
180 zn->zn_zap = zap; in zap_name_alloc()
185 zn->zn_normflags = zap->zap_normflags; in zap_name_alloc()
195 if (zap->zap_normflags) { in zap_name_alloc()
200 if (zap_normalize(zap, key, zn->zn_normbuf, in zap_name_alloc()
201 zap->zap_normflags) != 0) { in zap_name_alloc()
218 if (zap->zap_normflags != zn->zn_normflags) { in zap_name_alloc()
223 if (zap_normalize(zap, key, zn->zn_normbuf, in zap_name_alloc()
235 zap_name_alloc_uint64(zap_t *zap, const uint64_t *key, int numints) in zap_name_alloc_uint64() argument
239 ASSERT(zap->zap_normflags == 0); in zap_name_alloc_uint64()
240 zn->zn_zap = zap; in zap_name_alloc_uint64()
292 mze_insert(zap_t *zap, int chunkid, uint64_t hash) in mze_insert() argument
294 ASSERT(zap->zap_ismicro); in mze_insert()
295 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in mze_insert()
300 mze->mze_cd = MZE_PHYS(zap, mze)->mze_cd; in mze_insert()
301 ASSERT(MZE_PHYS(zap, mze)->mze_name[0] != 0); in mze_insert()
302 avl_add(&zap->zap_m.zap_avl, mze); in mze_insert()
332 mze_find_unused_cd(zap_t *zap, uint64_t hash) in mze_find_unused_cd() argument
336 avl_tree_t *avl = &zap->zap_m.zap_avl; in mze_find_unused_cd()
338 ASSERT(zap->zap_ismicro); in mze_find_unused_cd()
339 ASSERT(RW_LOCK_HELD(&zap->zap_rwlock)); in mze_find_unused_cd()
356 mze_remove(zap_t *zap, mzap_ent_t *mze) in mze_remove() argument
358 ASSERT(zap->zap_ismicro); in mze_remove()
359 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in mze_remove()
361 avl_remove(&zap->zap_m.zap_avl, mze); in mze_remove()
366 mze_destroy(zap_t *zap) in mze_destroy() argument
371 while (mze = avl_destroy_nodes(&zap->zap_m.zap_avl, &avlcookie)) in mze_destroy()
373 avl_destroy(&zap->zap_m.zap_avl); in mze_destroy()
386 zap_t *zap = kmem_zalloc(sizeof (zap_t), KM_SLEEP); in mzap_open() local
387 rw_init(&zap->zap_rwlock, 0, 0, 0); in mzap_open()
388 rw_enter(&zap->zap_rwlock, RW_WRITER); in mzap_open()
389 zap->zap_objset = os; in mzap_open()
390 zap->zap_object = obj; in mzap_open()
391 zap->zap_dbuf = db; in mzap_open()
394 mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, 0, 0); in mzap_open()
395 zap->zap_f.zap_block_shift = highbit64(db->db_size) - 1; in mzap_open()
401 zap->zap_ismicro = TRUE; in mzap_open()
409 dmu_buf_init_user(&zap->zap_dbu, zap_evict_sync, NULL, &zap->zap_dbuf); in mzap_open()
410 winner = dmu_buf_set_user(db, &zap->zap_dbu); in mzap_open()
415 if (zap->zap_ismicro) { in mzap_open()
416 zap->zap_salt = zap_m_phys(zap)->mz_salt; in mzap_open()
417 zap->zap_normflags = zap_m_phys(zap)->mz_normflags; in mzap_open()
418 zap->zap_m.zap_num_chunks = db->db_size / MZAP_ENT_LEN - 1; in mzap_open()
419 avl_create(&zap->zap_m.zap_avl, mze_compare, in mzap_open()
422 for (int i = 0; i < zap->zap_m.zap_num_chunks; i++) { in mzap_open()
424 &zap_m_phys(zap)->mz_chunk[i]; in mzap_open()
428 zap->zap_m.zap_num_entries++; in mzap_open()
429 zn = zap_name_alloc(zap, mze->mze_name, 0); in mzap_open()
430 mze_insert(zap, i, zn->zn_hash); in mzap_open()
435 zap->zap_salt = zap_f_phys(zap)->zap_salt; in mzap_open()
436 zap->zap_normflags = zap_f_phys(zap)->zap_normflags; in mzap_open()
445 ASSERT3P(&ZAP_EMBEDDED_PTRTBL_ENT(zap, 0), >, in mzap_open()
446 &zap_f_phys(zap)->zap_salt); in mzap_open()
452 ASSERT3U((uintptr_t)&ZAP_EMBEDDED_PTRTBL_ENT(zap, in mzap_open()
453 1<<ZAP_EMBEDDED_PTRTBL_SHIFT(zap)) - in mzap_open()
454 (uintptr_t)zap_f_phys(zap), ==, in mzap_open()
455 zap->zap_dbuf->db_size); in mzap_open()
457 rw_exit(&zap->zap_rwlock); in mzap_open()
458 return (zap); in mzap_open()
461 rw_exit(&zap->zap_rwlock); in mzap_open()
462 rw_destroy(&zap->zap_rwlock); in mzap_open()
463 if (!zap->zap_ismicro) in mzap_open()
464 mutex_destroy(&zap->zap_f.zap_num_entries_mtx); in mzap_open()
465 kmem_free(zap, sizeof (zap_t)); in mzap_open()
483 zap_t *zap = dmu_buf_get_user(db); in zap_lockdir_impl() local
484 if (zap == NULL) { in zap_lockdir_impl()
485 zap = mzap_open(os, obj, db); in zap_lockdir_impl()
486 if (zap == NULL) { in zap_lockdir_impl()
502 krw_t lt = (!zap->zap_ismicro && fatreader) ? RW_READER : lti; in zap_lockdir_impl()
503 rw_enter(&zap->zap_rwlock, lt); in zap_lockdir_impl()
504 if (lt != ((!zap->zap_ismicro && fatreader) ? RW_READER : lti)) { in zap_lockdir_impl()
508 (!zap->zap_ismicro && fatreader) ? RW_READER : lti); in zap_lockdir_impl()
509 rw_downgrade(&zap->zap_rwlock); in zap_lockdir_impl()
513 zap->zap_objset = os; in zap_lockdir_impl()
518 ASSERT3P(zap->zap_dbuf, ==, db); in zap_lockdir_impl()
520 ASSERT(!zap->zap_ismicro || in zap_lockdir_impl()
521 zap->zap_m.zap_num_entries <= zap->zap_m.zap_num_chunks); in zap_lockdir_impl()
522 if (zap->zap_ismicro && tx && adding && in zap_lockdir_impl()
523 zap->zap_m.zap_num_entries == zap->zap_m.zap_num_chunks) { in zap_lockdir_impl()
527 obj, zap->zap_m.zap_num_entries); in zap_lockdir_impl()
528 *zapp = zap; in zap_lockdir_impl()
531 rw_exit(&zap->zap_rwlock); in zap_lockdir_impl()
535 zap->zap_m.zap_num_chunks = in zap_lockdir_impl()
539 *zapp = zap; in zap_lockdir_impl()
591 zap_unlockdir(zap_t *zap, void *tag) in zap_unlockdir() argument
593 rw_exit(&zap->zap_rwlock); in zap_unlockdir()
594 dmu_buf_rele(zap->zap_dbuf, tag); in zap_unlockdir()
601 zap_t *zap = *zapp; in mzap_upgrade() local
603 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in mzap_upgrade()
605 int sz = zap->zap_dbuf->db_size; in mzap_upgrade()
607 bcopy(zap->zap_dbuf->db_data, mzp, sz); in mzap_upgrade()
608 int nchunks = zap->zap_m.zap_num_chunks; in mzap_upgrade()
611 err = dmu_object_set_blocksize(zap->zap_objset, zap->zap_object, in mzap_upgrade()
620 zap->zap_object, nchunks); in mzap_upgrade()
622 mze_destroy(zap); in mzap_upgrade()
624 fzap_upgrade(zap, tx, flags); in mzap_upgrade()
632 zap_name_t *zn = zap_name_alloc(zap, mze->mze_name, 0); in mzap_upgrade()
635 zap = zn->zn_zap; /* fzap_add_cd() may change zap */ in mzap_upgrade()
641 *zapp = zap; in mzap_upgrade()
677 zap_t *zap; in mzap_create_impl() local
680 B_FALSE, B_FALSE, &zap)); in mzap_create_impl()
681 VERIFY0(mzap_upgrade(&zap, FTAG, tx, flags)); in mzap_create_impl()
682 zap_unlockdir(zap, FTAG); in mzap_create_impl()
808 zap_t *zap = dbu; in zap_evict_sync() local
810 rw_destroy(&zap->zap_rwlock); in zap_evict_sync()
812 if (zap->zap_ismicro) in zap_evict_sync()
813 mze_destroy(zap); in zap_evict_sync()
815 mutex_destroy(&zap->zap_f.zap_num_entries_mtx); in zap_evict_sync()
817 kmem_free(zap, sizeof (zap_t)); in zap_evict_sync()
823 zap_t *zap; in zap_count() local
826 zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); in zap_count()
829 if (!zap->zap_ismicro) { in zap_count()
830 err = fzap_count(zap, count); in zap_count()
832 *count = zap->zap_m.zap_num_entries; in zap_count()
834 zap_unlockdir(zap, FTAG); in zap_count()
843 mzap_normalization_conflict(zap_t *zap, zap_name_t *zn, mzap_ent_t *mze) in mzap_normalization_conflict() argument
848 if (zap->zap_normflags == 0) in mzap_normalization_conflict()
852 for (mzap_ent_t *other = avl_walk(&zap->zap_m.zap_avl, mze, direction); in mzap_normalization_conflict()
854 other = avl_walk(&zap->zap_m.zap_avl, other, direction)) { in mzap_normalization_conflict()
857 zn = zap_name_alloc(zap, MZE_PHYS(zap, mze)->mze_name, in mzap_normalization_conflict()
861 if (zap_match(zn, MZE_PHYS(zap, other)->mze_name)) { in mzap_normalization_conflict()
891 zap_lookup_impl(zap_t *zap, const char *name, in zap_lookup_impl() argument
898 zap_name_t *zn = zap_name_alloc(zap, name, mt); in zap_lookup_impl()
902 if (!zap->zap_ismicro) { in zap_lookup_impl()
916 MZE_PHYS(zap, mze)->mze_value; in zap_lookup_impl()
918 MZE_PHYS(zap, mze)->mze_name, rn_len); in zap_lookup_impl()
920 *ncp = mzap_normalization_conflict(zap, in zap_lookup_impl()
936 zap_t *zap; in zap_lookup_norm() local
939 zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); in zap_lookup_norm()
942 err = zap_lookup_impl(zap, name, integer_size, in zap_lookup_norm()
944 zap_unlockdir(zap, FTAG); in zap_lookup_norm()
962 zap_t *zap; in zap_lookup_norm_by_dnode() local
965 FTAG, &zap); in zap_lookup_norm_by_dnode()
968 err = zap_lookup_impl(zap, name, integer_size, in zap_lookup_norm_by_dnode()
970 zap_unlockdir(zap, FTAG); in zap_lookup_norm_by_dnode()
978 zap_t *zap; in zap_prefetch_uint64() local
981 zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); in zap_prefetch_uint64()
984 zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints); in zap_prefetch_uint64()
986 zap_unlockdir(zap, FTAG); in zap_prefetch_uint64()
992 zap_unlockdir(zap, FTAG); in zap_prefetch_uint64()
1000 zap_t *zap; in zap_lookup_uint64() local
1003 zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); in zap_lookup_uint64()
1006 zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints); in zap_lookup_uint64()
1008 zap_unlockdir(zap, FTAG); in zap_lookup_uint64()
1015 zap_unlockdir(zap, FTAG); in zap_lookup_uint64()
1033 zap_t *zap; in zap_length() local
1036 zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); in zap_length()
1039 zap_name_t *zn = zap_name_alloc(zap, name, 0); in zap_length()
1041 zap_unlockdir(zap, FTAG); in zap_length()
1044 if (!zap->zap_ismicro) { in zap_length()
1058 zap_unlockdir(zap, FTAG); in zap_length()
1066 zap_t *zap; in zap_length_uint64() local
1069 zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); in zap_length_uint64()
1072 zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints); in zap_length_uint64()
1074 zap_unlockdir(zap, FTAG); in zap_length_uint64()
1079 zap_unlockdir(zap, FTAG); in zap_length_uint64()
1086 zap_t *zap = zn->zn_zap; in mzap_addent() local
1087 int start = zap->zap_m.zap_alloc_next; in mzap_addent()
1089 ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); in mzap_addent()
1092 for (int i = 0; i < zap->zap_m.zap_num_chunks; i++) { in mzap_addent()
1093 mzap_ent_phys_t *mze = &zap_m_phys(zap)->mz_chunk[i]; in mzap_addent()
1098 uint32_t cd = mze_find_unused_cd(zap, zn->zn_hash); in mzap_addent()
1100 ASSERT(cd < zap_maxcd(zap)); in mzap_addent()
1103 for (int i = start; i < zap->zap_m.zap_num_chunks; i++) { in mzap_addent()
1104 mzap_ent_phys_t *mze = &zap_m_phys(zap)->mz_chunk[i]; in mzap_addent()
1109 zap->zap_m.zap_num_entries++; in mzap_addent()
1110 zap->zap_m.zap_alloc_next = i+1; in mzap_addent()
1111 if (zap->zap_m.zap_alloc_next == in mzap_addent()
1112 zap->zap_m.zap_num_chunks) in mzap_addent()
1113 zap->zap_m.zap_alloc_next = 0; in mzap_addent()
1114 mze_insert(zap, i, zn->zn_hash); in mzap_addent()
1126 zap_add_impl(zap_t *zap, const char *key, in zap_add_impl() argument
1133 zap_name_t *zn = zap_name_alloc(zap, key, 0); in zap_add_impl()
1135 zap_unlockdir(zap, tag); in zap_add_impl()
1138 if (!zap->zap_ismicro) { in zap_add_impl()
1140 zap = zn->zn_zap; /* fzap_add() may change zap */ in zap_add_impl()
1148 zap = zn->zn_zap; /* fzap_add() may change zap */ in zap_add_impl()
1156 ASSERT(zap == zn->zn_zap); in zap_add_impl()
1158 if (zap != NULL) /* may be NULL if fzap_add() failed */ in zap_add_impl()
1159 zap_unlockdir(zap, tag); in zap_add_impl()
1168 zap_t *zap; in zap_add() local
1171 err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); in zap_add()
1174 err = zap_add_impl(zap, key, integer_size, num_integers, val, tx, FTAG); in zap_add()
1184 zap_t *zap; in zap_add_by_dnode() local
1187 err = zap_lockdir_by_dnode(dn, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); in zap_add_by_dnode()
1190 err = zap_add_impl(zap, key, integer_size, num_integers, val, tx, FTAG); in zap_add_by_dnode()
1200 zap_t *zap; in zap_add_uint64() local
1203 zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); in zap_add_uint64()
1206 zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints); in zap_add_uint64()
1208 zap_unlockdir(zap, FTAG); in zap_add_uint64()
1212 zap = zn->zn_zap; /* fzap_add() may change zap */ in zap_add_uint64()
1214 if (zap != NULL) /* may be NULL if fzap_add() failed */ in zap_add_uint64()
1215 zap_unlockdir(zap, FTAG); in zap_add_uint64()
1223 zap_t *zap; in zap_update() local
1237 zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); in zap_update()
1240 zap_name_t *zn = zap_name_alloc(zap, name, 0); in zap_update()
1242 zap_unlockdir(zap, FTAG); in zap_update()
1245 if (!zap->zap_ismicro) { in zap_update()
1248 zap = zn->zn_zap; /* fzap_update() may change zap */ in zap_update()
1258 zap = zn->zn_zap; /* fzap_update() may change zap */ in zap_update()
1262 ASSERT3U(MZE_PHYS(zap, mze)->mze_value, ==, oldval); in zap_update()
1263 MZE_PHYS(zap, mze)->mze_value = *intval; in zap_update()
1268 ASSERT(zap == zn->zn_zap); in zap_update()
1270 if (zap != NULL) /* may be NULL if fzap_upgrade() failed */ in zap_update()
1271 zap_unlockdir(zap, FTAG); in zap_update()
1280 zap_t *zap; in zap_update_uint64() local
1283 zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, TRUE, FTAG, &zap); in zap_update_uint64()
1286 zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints); in zap_update_uint64()
1288 zap_unlockdir(zap, FTAG); in zap_update_uint64()
1292 zap = zn->zn_zap; /* fzap_update() may change zap */ in zap_update_uint64()
1294 if (zap != NULL) /* may be NULL if fzap_upgrade() failed */ in zap_update_uint64()
1295 zap_unlockdir(zap, FTAG); in zap_update_uint64()
1306 zap_remove_impl(zap_t *zap, const char *name, in zap_remove_impl() argument
1311 zap_name_t *zn = zap_name_alloc(zap, name, mt); in zap_remove_impl()
1314 if (!zap->zap_ismicro) { in zap_remove_impl()
1321 zap->zap_m.zap_num_entries--; in zap_remove_impl()
1322 bzero(&zap_m_phys(zap)->mz_chunk[mze->mze_chunkid], in zap_remove_impl()
1324 mze_remove(zap, mze); in zap_remove_impl()
1335 zap_t *zap; in zap_remove_norm() local
1338 err = zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, FALSE, FTAG, &zap); in zap_remove_norm()
1341 err = zap_remove_impl(zap, name, mt, tx); in zap_remove_norm()
1342 zap_unlockdir(zap, FTAG); in zap_remove_norm()
1349 zap_t *zap; in zap_remove_by_dnode() local
1352 err = zap_lockdir_by_dnode(dn, tx, RW_WRITER, TRUE, FALSE, FTAG, &zap); in zap_remove_by_dnode()
1355 err = zap_remove_impl(zap, name, 0, tx); in zap_remove_by_dnode()
1356 zap_unlockdir(zap, FTAG); in zap_remove_by_dnode()
1364 zap_t *zap; in zap_remove_uint64() local
1367 zap_lockdir(os, zapobj, tx, RW_WRITER, TRUE, FALSE, FTAG, &zap); in zap_remove_uint64()
1370 zap_name_t *zn = zap_name_alloc_uint64(zap, key, key_numints); in zap_remove_uint64()
1372 zap_unlockdir(zap, FTAG); in zap_remove_uint64()
1377 zap_unlockdir(zap, FTAG); in zap_remove_uint64()
1539 zap_t *zap; in zap_get_stats() local
1542 zap_lockdir(os, zapobj, NULL, RW_READER, TRUE, FALSE, FTAG, &zap); in zap_get_stats()
1548 if (zap->zap_ismicro) { in zap_get_stats()
1549 zs->zs_blocksize = zap->zap_dbuf->db_size; in zap_get_stats()
1550 zs->zs_num_entries = zap->zap_m.zap_num_entries; in zap_get_stats()
1553 fzap_get_stats(zap, zs); in zap_get_stats()
1555 zap_unlockdir(zap, FTAG); in zap_get_stats()