Lines Matching refs:l

44 static uint16_t *zap_leaf_rehash_entry(zap_leaf_t *l, uint16_t entry);
51 #define LEAF_HASH(l, h) \ argument
52 ((ZAP_LEAF_HASH_NUMENTRIES(l)-1) & \
54 (64 - ZAP_LEAF_HASH_SHIFT(l) - zap_leaf_phys(l)->l_hdr.lh_prefix_len)))
56 #define LEAF_HASH_ENTPTR(l, h) (&zap_leaf_phys(l)->l_hash[LEAF_HASH(l, h)]) argument
58 extern inline zap_leaf_phys_t *zap_leaf_phys(zap_leaf_t *l);
110 zap_leaf_t l; in zap_leaf_byteswap() local
114 l.l_bs = highbit64(size) - 1; in zap_leaf_byteswap()
115 l.l_dbuf = &l_dbuf; in zap_leaf_byteswap()
125 for (int i = 0; i < ZAP_LEAF_HASH_NUMENTRIES(&l); i++) in zap_leaf_byteswap()
128 for (int i = 0; i < ZAP_LEAF_NUMCHUNKS(&l); i++) { in zap_leaf_byteswap()
129 zap_leaf_chunk_t *lc = &ZAP_LEAF_CHUNK(&l, i); in zap_leaf_byteswap()
162 zap_leaf_init(zap_leaf_t *l, boolean_t sort) in zap_leaf_init() argument
164 l->l_bs = highbit64(l->l_dbuf->db_size) - 1; in zap_leaf_init()
165 zap_memset(&zap_leaf_phys(l)->l_hdr, 0, in zap_leaf_init()
167 zap_memset(zap_leaf_phys(l)->l_hash, CHAIN_END, in zap_leaf_init()
168 2*ZAP_LEAF_HASH_NUMENTRIES(l)); in zap_leaf_init()
169 for (int i = 0; i < ZAP_LEAF_NUMCHUNKS(l); i++) { in zap_leaf_init()
170 ZAP_LEAF_CHUNK(l, i).l_free.lf_type = ZAP_CHUNK_FREE; in zap_leaf_init()
171 ZAP_LEAF_CHUNK(l, i).l_free.lf_next = i+1; in zap_leaf_init()
173 ZAP_LEAF_CHUNK(l, ZAP_LEAF_NUMCHUNKS(l)-1).l_free.lf_next = CHAIN_END; in zap_leaf_init()
174 zap_leaf_phys(l)->l_hdr.lh_block_type = ZBT_LEAF; in zap_leaf_init()
175 zap_leaf_phys(l)->l_hdr.lh_magic = ZAP_LEAF_MAGIC; in zap_leaf_init()
176 zap_leaf_phys(l)->l_hdr.lh_nfree = ZAP_LEAF_NUMCHUNKS(l); in zap_leaf_init()
178 zap_leaf_phys(l)->l_hdr.lh_flags |= ZLF_ENTRIES_CDSORTED; in zap_leaf_init()
186 zap_leaf_chunk_alloc(zap_leaf_t *l) in zap_leaf_chunk_alloc() argument
188 ASSERT(zap_leaf_phys(l)->l_hdr.lh_nfree > 0); in zap_leaf_chunk_alloc()
190 int chunk = zap_leaf_phys(l)->l_hdr.lh_freelist; in zap_leaf_chunk_alloc()
191 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_chunk_alloc()
192 ASSERT3U(ZAP_LEAF_CHUNK(l, chunk).l_free.lf_type, ==, ZAP_CHUNK_FREE); in zap_leaf_chunk_alloc()
194 zap_leaf_phys(l)->l_hdr.lh_freelist = in zap_leaf_chunk_alloc()
195 ZAP_LEAF_CHUNK(l, chunk).l_free.lf_next; in zap_leaf_chunk_alloc()
197 zap_leaf_phys(l)->l_hdr.lh_nfree--; in zap_leaf_chunk_alloc()
203 zap_leaf_chunk_free(zap_leaf_t *l, uint16_t chunk) in zap_leaf_chunk_free() argument
205 struct zap_leaf_free *zlf = &ZAP_LEAF_CHUNK(l, chunk).l_free; in zap_leaf_chunk_free()
206 ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_nfree, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_chunk_free()
207 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_chunk_free()
211 zlf->lf_next = zap_leaf_phys(l)->l_hdr.lh_freelist; in zap_leaf_chunk_free()
213 zap_leaf_phys(l)->l_hdr.lh_freelist = chunk; in zap_leaf_chunk_free()
215 zap_leaf_phys(l)->l_hdr.lh_nfree++; in zap_leaf_chunk_free()
223 zap_leaf_array_create(zap_leaf_t *l, const char *buf, in zap_leaf_array_create() argument
236 uint16_t chunk = zap_leaf_chunk_alloc(l); in zap_leaf_array_create()
237 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; in zap_leaf_array_create()
262 zap_leaf_array_free(zap_leaf_t *l, uint16_t *chunkp) in zap_leaf_array_free() argument
269 int nextchunk = ZAP_LEAF_CHUNK(l, chunk).l_array.la_next; in zap_leaf_array_free()
270 ASSERT3U(ZAP_LEAF_CHUNK(l, chunk).l_array.la_type, ==, in zap_leaf_array_free()
272 zap_leaf_chunk_free(l, chunk); in zap_leaf_array_free()
279 zap_leaf_array_read(zap_leaf_t *l, uint16_t chunk, in zap_leaf_array_read() argument
292 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; in zap_leaf_array_read()
308 &ZAP_LEAF_CHUNK(l, chunk).l_array; in zap_leaf_array_read()
317 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; in zap_leaf_array_read()
319 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_array_read()
337 zap_leaf_array_match(zap_leaf_t *l, zap_name_t *zn, in zap_leaf_array_match() argument
347 zap_leaf_array_read(l, chunk, sizeof (*thiskey), array_numints, in zap_leaf_array_match()
359 zap_leaf_array_read(l, chunk, sizeof (char), array_numints, in zap_leaf_array_match()
374 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array; in zap_leaf_array_match()
376 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_array_match()
390 zap_leaf_lookup(zap_leaf_t *l, zap_name_t *zn, zap_entry_handle_t *zeh) in zap_leaf_lookup() argument
394 ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_magic, ==, ZAP_LEAF_MAGIC); in zap_leaf_lookup()
396 for (uint16_t *chunkp = LEAF_HASH_ENTPTR(l, zn->zn_hash); in zap_leaf_lookup()
399 le = ZAP_LEAF_ENTRY(l, chunk); in zap_leaf_lookup()
401 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_lookup()
413 (zap_leaf_phys(l)->l_hdr.lh_flags & ZLF_ENTRIES_CDSORTED)); in zap_leaf_lookup()
414 if (zap_leaf_array_match(l, zn, le->le_name_chunk, in zap_leaf_lookup()
421 zeh->zeh_leaf = l; in zap_leaf_lookup()
434 zap_leaf_lookup_closest(zap_leaf_t *l, in zap_leaf_lookup_closest() argument
439 uint16_t bestlh = ZAP_LEAF_HASH_NUMENTRIES(l)-1; in zap_leaf_lookup_closest()
442 ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_magic, ==, ZAP_LEAF_MAGIC); in zap_leaf_lookup_closest()
444 for (uint16_t lh = LEAF_HASH(l, h); lh <= bestlh; lh++) { in zap_leaf_lookup_closest()
445 for (uint16_t chunk = zap_leaf_phys(l)->l_hash[lh]; in zap_leaf_lookup_closest()
447 le = ZAP_LEAF_ENTRY(l, chunk); in zap_leaf_lookup_closest()
449 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_lookup_closest()
465 zeh->zeh_leaf = l; in zap_leaf_lookup_closest()
518 zap_leaf_t *l = zeh->zeh_leaf; in zap_entry_update() local
519 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, *zeh->zeh_chunkp); in zap_entry_update()
524 if ((int)zap_leaf_phys(l)->l_hdr.lh_nfree < delta_chunks) in zap_entry_update()
527 zap_leaf_array_free(l, &le->le_value_chunk); in zap_entry_update()
529 zap_leaf_array_create(l, buf, integer_size, num_integers); in zap_entry_update()
538 zap_leaf_t *l = zeh->zeh_leaf; in zap_entry_remove() local
543 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, entry_chunk); in zap_entry_remove()
546 zap_leaf_array_free(l, &le->le_name_chunk); in zap_entry_remove()
547 zap_leaf_array_free(l, &le->le_value_chunk); in zap_entry_remove()
550 zap_leaf_chunk_free(l, entry_chunk); in zap_entry_remove()
552 zap_leaf_phys(l)->l_hdr.lh_nentries--; in zap_entry_remove()
556 zap_entry_create(zap_leaf_t *l, zap_name_t *zn, uint32_t cd, in zap_entry_create() argument
568 if (numchunks > ZAP_LEAF_NUMCHUNKS(l)) in zap_entry_create()
573 if (zap_leaf_phys(l)->l_hdr.lh_flags & ZLF_ENTRIES_CDSORTED) { in zap_entry_create()
576 for (chunk = *LEAF_HASH_ENTPTR(l, h); in zap_entry_create()
578 le = ZAP_LEAF_ENTRY(l, chunk); in zap_entry_create()
589 for (chunk = *LEAF_HASH_ENTPTR(l, h); in zap_entry_create()
591 le = ZAP_LEAF_ENTRY(l, chunk); in zap_entry_create()
609 if (zap_leaf_phys(l)->l_hdr.lh_nfree < numchunks) in zap_entry_create()
613 chunk = zap_leaf_chunk_alloc(l); in zap_entry_create()
614 le = ZAP_LEAF_ENTRY(l, chunk); in zap_entry_create()
616 le->le_name_chunk = zap_leaf_array_create(l, zn->zn_key_orig, in zap_entry_create()
620 zap_leaf_array_create(l, buf, integer_size, num_integers); in zap_entry_create()
628 uint16_t *chunkp = zap_leaf_rehash_entry(l, chunk); in zap_entry_create()
630 zap_leaf_phys(l)->l_hdr.lh_nentries++; in zap_entry_create()
632 zeh->zeh_leaf = l; in zap_entry_create()
691 zap_leaf_rehash_entry(zap_leaf_t *l, uint16_t entry) in zap_leaf_rehash_entry() argument
693 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, entry); in zap_leaf_rehash_entry()
702 for (chunkp = LEAF_HASH_ENTPTR(l, le->le_hash); in zap_leaf_rehash_entry()
704 le2 = ZAP_LEAF_ENTRY(l, *chunkp); in zap_leaf_rehash_entry()
715 zap_leaf_transfer_array(zap_leaf_t *l, uint16_t chunk, zap_leaf_t *nl) in zap_leaf_transfer_array() argument
725 &ZAP_LEAF_CHUNK(l, chunk).l_array; in zap_leaf_transfer_array()
728 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_transfer_array()
729 ASSERT3U(nchunk, <, ZAP_LEAF_NUMCHUNKS(l)); in zap_leaf_transfer_array()
733 zap_leaf_chunk_free(l, chunk); in zap_leaf_transfer_array()
743 zap_leaf_transfer_entry(zap_leaf_t *l, int entry, zap_leaf_t *nl) in zap_leaf_transfer_entry() argument
745 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, entry); in zap_leaf_transfer_entry()
754 nle->le_name_chunk = zap_leaf_transfer_array(l, le->le_name_chunk, nl); in zap_leaf_transfer_entry()
756 zap_leaf_transfer_array(l, le->le_value_chunk, nl); in zap_leaf_transfer_entry()
758 zap_leaf_chunk_free(l, entry); in zap_leaf_transfer_entry()
760 zap_leaf_phys(l)->l_hdr.lh_nentries--; in zap_leaf_transfer_entry()
768 zap_leaf_split(zap_leaf_t *l, zap_leaf_t *nl, boolean_t sort) in zap_leaf_split() argument
770 int bit = 64 - 1 - zap_leaf_phys(l)->l_hdr.lh_prefix_len; in zap_leaf_split()
773 zap_leaf_phys(l)->l_hdr.lh_prefix <<= 1; in zap_leaf_split()
774 zap_leaf_phys(l)->l_hdr.lh_prefix_len++; in zap_leaf_split()
776 zap_leaf_phys(l)->l_hdr.lh_prefix | 1; in zap_leaf_split()
778 zap_leaf_phys(l)->l_hdr.lh_prefix_len; in zap_leaf_split()
781 zap_memset(zap_leaf_phys(l)->l_hash, CHAIN_END, in zap_leaf_split()
782 2*ZAP_LEAF_HASH_NUMENTRIES(l)); in zap_leaf_split()
785 zap_leaf_phys(l)->l_hdr.lh_flags |= ZLF_ENTRIES_CDSORTED; in zap_leaf_split()
796 for (int i = 0; i < ZAP_LEAF_NUMCHUNKS(l); i++) { in zap_leaf_split()
797 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, i); in zap_leaf_split()
802 zap_leaf_transfer_entry(l, i, nl); in zap_leaf_split()
804 (void) zap_leaf_rehash_entry(l, i); in zap_leaf_split()
809 zap_leaf_stats(zap_t *zap, zap_leaf_t *l, zap_stats_t *zs) in zap_leaf_stats() argument
812 zap_leaf_phys(l)->l_hdr.lh_prefix_len; in zap_leaf_stats()
817 n = zap_leaf_phys(l)->l_hdr.lh_nentries/5; in zap_leaf_stats()
822 zap_leaf_phys(l)->l_hdr.lh_nfree * (ZAP_LEAF_ARRAY_BYTES+1))*10 / in zap_leaf_stats()
827 for (int i = 0; i < ZAP_LEAF_HASH_NUMENTRIES(l); i++) { in zap_leaf_stats()
829 int chunk = zap_leaf_phys(l)->l_hash[i]; in zap_leaf_stats()
833 ZAP_LEAF_ENTRY(l, chunk); in zap_leaf_stats()