Lines Matching full:zap

64 	unsigned long	chunks;		/* count of chunks needed for fat ZAP */
65 bool micro; /* can this be a micro ZAP? */
117 zfs_zap_t *zap; in zap_alloc() local
119 zap = ecalloc(1, sizeof(*zap)); in zap_alloc()
120 STAILQ_INIT(&zap->kvps); in zap_alloc()
121 zap->hashsalt = ((uint64_t)random() << 32) | random(); in zap_alloc()
122 zap->micro = true; in zap_alloc()
123 zap->kvpcnt = 0; in zap_alloc()
124 zap->chunks = 0; in zap_alloc()
125 zap->dnode = dnode; in zap_alloc()
126 zap->os = os; in zap_alloc()
127 return (zap); in zap_alloc()
131 zap_add(zfs_zap_t *zap, const char *name, size_t intsz, size_t intcnt, in zap_add() argument
142 ent->hash = zap_hash(zap->hashsalt, ent->name); in zap_add()
155 zap->kvpcnt++; in zap_add()
156 zap->chunks += zap_entry_chunks(ent); in zap_add()
157 STAILQ_INSERT_TAIL(&zap->kvps, ent, next); in zap_add()
159 if (zap->micro && (intcnt != 1 || intsz != sizeof(uint64_t) || in zap_add()
160 strlen(name) + 1 > MZAP_NAME_LEN || zap->kvpcnt > MZAP_ENT_MAX)) in zap_add()
161 zap->micro = false; in zap_add()
165 zap_add_uint64(zfs_zap_t *zap, const char *name, uint64_t val) in zap_add_uint64() argument
167 zap_add(zap, name, sizeof(uint64_t), 1, (uint8_t *)&val); in zap_add_uint64()
171 zap_add_uint64_self(zfs_zap_t *zap, uint64_t val) in zap_add_uint64_self() argument
176 zap_add(zap, name, sizeof(uint64_t), 1, (uint8_t *)&val); in zap_add_uint64_self()
180 zap_add_string(zfs_zap_t *zap, const char *name, const char *val) in zap_add_string() argument
182 zap_add(zap, name, 1, strlen(val) + 1, (const uint8_t *)val); in zap_add_string()
186 zap_entry_exists(zfs_zap_t *zap, const char *name) in zap_entry_exists() argument
190 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_entry_exists()
198 zap_micro_write(zfs_opt_t *zfs, zfs_zap_t *zap) in zap_micro_write() argument
208 "micro ZAP collision differentiator must fit in 16 bits"); in zap_micro_write()
213 mzap->mz_salt = zap->hashsalt; in zap_micro_write()
216 bytes = sizeof(*mzap) + (zap->kvpcnt - 1) * sizeof(*ment); in zap_micro_write()
221 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_micro_write()
229 loc = objset_space_alloc(zfs, zap->os, &bytes); in zap_micro_write()
231 dnode = zap->dnode; in zap_micro_write()
239 * Write some data to the fat ZAP leaf chunk starting at index "li".
271 zap_fat_write_prefixlen(zfs_zap_t *zap, zap_leaf_t *l) in zap_fat_write_prefixlen() argument
276 if (zap->chunks <= ZAP_LEAF_NUMCHUNKS(l)) { in zap_fat_write_prefixlen()
287 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_fat_write_prefixlen()
322 * Initialize a fat ZAP leaf block.
356 zap_fat_write(zfs_opt_t *zfs, zfs_zap_t *zap) in zap_fat_write() argument
389 zaphdr->zap_num_entries = zap->kvpcnt; in zap_fat_write()
390 zaphdr->zap_salt = zap->hashsalt; in zap_fat_write()
406 prefixlen = zap_fat_write_prefixlen(zap, &l); in zap_fat_write()
422 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_fat_write()
524 dnode = zap->dnode; in zap_fat_write()
528 c = dnode_cursor_init(zfs, zap->os, zap->dnode, in zap_fat_write()
531 loc = objset_space_alloc(zfs, zap->os, &blksz); in zap_fat_write()
536 loc = objset_space_alloc(zfs, zap->os, &blksz); in zap_fat_write()
547 zap_write(zfs_opt_t *zfs, zfs_zap_t *zap) in zap_write() argument
551 if (zap->micro) { in zap_write()
552 zap_micro_write(zfs, zap); in zap_write()
554 assert(!STAILQ_EMPTY(&zap->kvps)); in zap_write()
555 assert(zap->kvpcnt > 0); in zap_write()
556 zap_fat_write(zfs, zap); in zap_write()
559 while ((ent = STAILQ_FIRST(&zap->kvps)) != NULL) { in zap_write()
560 STAILQ_REMOVE_HEAD(&zap->kvps, next); in zap_write()
566 free(zap); in zap_write()