Lines Matching defs:l

44 static uint16_t *zap_leaf_rehash_entry(zap_leaf_t *l, struct zap_leaf_entry *le,
49 #define LEAF_HASH(l, h) \
50 ((ZAP_LEAF_HASH_NUMENTRIES(l)-1) & \
52 (64 - ZAP_LEAF_HASH_SHIFT(l) - zap_leaf_phys(l)->l_hdr.lh_prefix_len)))
54 #define LEAF_HASH_ENTPTR(l, h) (&zap_leaf_phys(l)->l_hash[LEAF_HASH(l, h)])
98 zap_leaf_t l;
102 l.l_bs = highbit64(size) - 1;
103 l.l_dbuf = &l_dbuf;
113 for (uint_t i = 0; i < ZAP_LEAF_HASH_NUMENTRIES(&l); i++)
116 for (uint_t i = 0; i < ZAP_LEAF_NUMCHUNKS(&l); i++) {
117 zap_leaf_chunk_t *lc = &ZAP_LEAF_CHUNK(&l, i);
151 zap_leaf_init(zap_leaf_t *l, boolean_t sort)
153 l->l_bs = highbit64(l->l_dbuf->db_size) - 1;
154 memset(&zap_leaf_phys(l)->l_hdr, 0,
156 memset(zap_leaf_phys(l)->l_hash, CHAIN_END,
157 2*ZAP_LEAF_HASH_NUMENTRIES(l));
158 for (uint_t i = 0; i < ZAP_LEAF_NUMCHUNKS(l); i++) {
159 ZAP_LEAF_CHUNK(l, i).l_free.lf_type = ZAP_CHUNK_FREE;
160 ZAP_LEAF_CHUNK(l, i).l_free.lf_next = i+1;
162 ZAP_LEAF_CHUNK(l, ZAP_LEAF_NUMCHUNKS(l)-1).l_free.lf_next = CHAIN_END;
163 zap_leaf_phys(l)->l_hdr.lh_block_type = ZBT_LEAF;
164 zap_leaf_phys(l)->l_hdr.lh_magic = ZAP_LEAF_MAGIC;
165 zap_leaf_phys(l)->l_hdr.lh_nfree = ZAP_LEAF_NUMCHUNKS(l);
167 zap_leaf_phys(l)->l_hdr.lh_flags |= ZLF_ENTRIES_CDSORTED;
175 zap_leaf_chunk_alloc(zap_leaf_t *l)
177 ASSERT(zap_leaf_phys(l)->l_hdr.lh_nfree > 0);
179 uint_t chunk = zap_leaf_phys(l)->l_hdr.lh_freelist;
180 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
181 ASSERT3U(ZAP_LEAF_CHUNK(l, chunk).l_free.lf_type, ==, ZAP_CHUNK_FREE);
183 zap_leaf_phys(l)->l_hdr.lh_freelist =
184 ZAP_LEAF_CHUNK(l, chunk).l_free.lf_next;
186 zap_leaf_phys(l)->l_hdr.lh_nfree--;
192 zap_leaf_chunk_free(zap_leaf_t *l, uint16_t chunk)
194 struct zap_leaf_free *zlf = &ZAP_LEAF_CHUNK(l, chunk).l_free;
195 ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_nfree, <, ZAP_LEAF_NUMCHUNKS(l));
196 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
200 zlf->lf_next = zap_leaf_phys(l)->l_hdr.lh_freelist;
202 zap_leaf_phys(l)->l_hdr.lh_freelist = chunk;
204 zap_leaf_phys(l)->l_hdr.lh_nfree++;
212 zap_leaf_array_create(zap_leaf_t *l, const char *buf,
227 uint16_t chunk = zap_leaf_chunk_alloc(l);
228 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array;
255 zap_leaf_array_copy(zap_leaf_t *l, uint16_t chunk, zap_leaf_t *nl)
261 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
265 &ZAP_LEAF_CHUNK(l, chunk).l_array;
285 zap_leaf_array_free(zap_leaf_t *l, uint16_t chunk)
287 struct zap_leaf_header *hdr = &zap_leaf_phys(l)->l_hdr;
292 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
293 zap_leaf_chunk_t *c = &ZAP_LEAF_CHUNK(l, chunk);
303 ASSERT3U(hdr->lh_nfree, <, ZAP_LEAF_NUMCHUNKS(l));
312 zap_leaf_array_read(zap_leaf_t *l, uint16_t chunk,
325 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array;
341 &ZAP_LEAF_CHUNK(l, chunk).l_array;
350 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array;
352 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
370 zap_leaf_array_match(zap_leaf_t *l, zap_name_t *zn,
380 zap_leaf_array_read(l, chunk, sizeof (*thiskey), array_numints,
392 zap_leaf_array_read(l, chunk, sizeof (char), array_numints,
407 struct zap_leaf_array *la = &ZAP_LEAF_CHUNK(l, chunk).l_array;
409 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
424 zap_leaf_lookup(zap_leaf_t *l, zap_name_t *zn, zap_entry_handle_t *zeh)
428 ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_magic, ==, ZAP_LEAF_MAGIC);
430 for (uint16_t *chunkp = LEAF_HASH_ENTPTR(l, zn->zn_hash);
433 le = ZAP_LEAF_ENTRY(l, chunk);
435 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
447 (zap_leaf_phys(l)->l_hdr.lh_flags & ZLF_ENTRIES_CDSORTED));
448 if (zap_leaf_array_match(l, zn, le->le_name_chunk,
455 zeh->zeh_leaf = l;
468 zap_leaf_lookup_closest(zap_leaf_t *l,
473 uint16_t bestlh = ZAP_LEAF_HASH_NUMENTRIES(l)-1;
476 ASSERT3U(zap_leaf_phys(l)->l_hdr.lh_magic, ==, ZAP_LEAF_MAGIC);
478 for (uint16_t lh = LEAF_HASH(l, h); lh <= bestlh; lh++) {
479 for (uint16_t chunk = zap_leaf_phys(l)->l_hash[lh];
481 le = ZAP_LEAF_ENTRY(l, chunk);
483 ASSERT3U(chunk, <, ZAP_LEAF_NUMCHUNKS(l));
499 zeh->zeh_leaf = l;
552 zap_leaf_t *l = zeh->zeh_leaf;
553 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, *zeh->zeh_chunkp);
558 if ((int)zap_leaf_phys(l)->l_hdr.lh_nfree < delta_chunks)
561 zap_leaf_array_free(l, le->le_value_chunk);
563 zap_leaf_array_create(l, buf, integer_size, num_integers);
572 zap_leaf_t *l = zeh->zeh_leaf;
577 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, entry_chunk);
583 zap_leaf_array_free(l, le->le_value_chunk);
584 zap_leaf_array_free(l, le->le_name_chunk);
585 zap_leaf_chunk_free(l, entry_chunk);
587 zap_leaf_phys(l)->l_hdr.lh_nentries--;
591 zap_entry_create(zap_leaf_t *l, zap_name_t *zn, uint32_t cd,
603 if (numchunks > ZAP_LEAF_NUMCHUNKS(l))
608 if (zap_leaf_phys(l)->l_hdr.lh_flags & ZLF_ENTRIES_CDSORTED) {
611 for (chunk = *LEAF_HASH_ENTPTR(l, h);
613 le = ZAP_LEAF_ENTRY(l, chunk);
624 for (chunk = *LEAF_HASH_ENTPTR(l, h);
626 le = ZAP_LEAF_ENTRY(l, chunk);
644 if (zap_leaf_phys(l)->l_hdr.lh_nfree < numchunks)
648 chunk = zap_leaf_chunk_alloc(l);
649 le = ZAP_LEAF_ENTRY(l, chunk);
651 le->le_name_chunk = zap_leaf_array_create(l, zn->zn_key_orig,
655 zap_leaf_array_create(l, buf, integer_size, num_integers);
663 uint16_t *chunkp = zap_leaf_rehash_entry(l, le, chunk);
665 zap_leaf_phys(l)->l_hdr.lh_nentries++;
667 zeh->zeh_leaf = l;
726 zap_leaf_rehash_entry(zap_leaf_t *l, struct zap_leaf_entry *le, uint16_t entry)
736 for (chunkp = LEAF_HASH_ENTPTR(l, le->le_hash);
738 le2 = ZAP_LEAF_ENTRY(l, *chunkp);
749 zap_leaf_transfer_entry(zap_leaf_t *l, uint_t entry, zap_leaf_t *nl)
751 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, entry);
760 nle->le_name_chunk = zap_leaf_array_copy(l, le->le_name_chunk, nl);
761 nle->le_value_chunk = zap_leaf_array_copy(l, le->le_value_chunk, nl);
764 zap_leaf_array_free(l, le->le_value_chunk);
765 zap_leaf_array_free(l, le->le_name_chunk);
766 zap_leaf_chunk_free(l, entry);
768 zap_leaf_phys(l)->l_hdr.lh_nentries--;
776 zap_leaf_split(zap_leaf_t *l, zap_leaf_t *nl, boolean_t sort)
778 uint_t bit = 64 - 1 - zap_leaf_phys(l)->l_hdr.lh_prefix_len;
781 zap_leaf_phys(l)->l_hdr.lh_prefix <<= 1;
782 zap_leaf_phys(l)->l_hdr.lh_prefix_len++;
784 zap_leaf_phys(l)->l_hdr.lh_prefix | 1;
786 zap_leaf_phys(l)->l_hdr.lh_prefix_len;
789 memset(zap_leaf_phys(l)->l_hash, CHAIN_END,
790 2*ZAP_LEAF_HASH_NUMENTRIES(l));
793 zap_leaf_phys(l)->l_hdr.lh_flags |= ZLF_ENTRIES_CDSORTED;
804 for (uint_t i = 0; i < ZAP_LEAF_NUMCHUNKS(l); i++) {
805 struct zap_leaf_entry *le = ZAP_LEAF_ENTRY(l, i);
810 zap_leaf_transfer_entry(l, i, nl);
812 (void) zap_leaf_rehash_entry(l, le, i);
817 zap_leaf_stats(zap_t *zap, zap_leaf_t *l, zap_stats_t *zs)
820 zap_leaf_phys(l)->l_hdr.lh_prefix_len;
825 n = zap_leaf_phys(l)->l_hdr.lh_nentries/5;
830 zap_leaf_phys(l)->l_hdr.lh_nfree * (ZAP_LEAF_ARRAY_BYTES+1))*10 /
835 for (uint_t i = 0; i < ZAP_LEAF_HASH_NUMENTRIES(l); i++) {
837 uint_t chunk = zap_leaf_phys(l)->l_hash[i];
841 ZAP_LEAF_ENTRY(l, chunk);