Lines Matching full:zap

63 	unsigned long	chunks;		/* count of chunks needed for fat ZAP */
64 bool micro; /* can this be a micro ZAP? */
116 zfs_zap_t *zap; in zap_alloc() local
118 zap = ecalloc(1, sizeof(*zap)); in zap_alloc()
119 STAILQ_INIT(&zap->kvps); in zap_alloc()
120 zap->hashsalt = ((uint64_t)random() << 32) | random(); in zap_alloc()
121 zap->micro = true; in zap_alloc()
122 zap->kvpcnt = 0; in zap_alloc()
123 zap->chunks = 0; in zap_alloc()
124 zap->dnode = dnode; in zap_alloc()
125 zap->os = os; in zap_alloc()
126 return (zap); in zap_alloc()
130 zap_add(zfs_zap_t *zap, const char *name, size_t intsz, size_t intcnt, in zap_add() argument
141 ent->hash = zap_hash(zap->hashsalt, ent->name); in zap_add()
154 zap->kvpcnt++; in zap_add()
155 zap->chunks += zap_entry_chunks(ent); in zap_add()
156 STAILQ_INSERT_TAIL(&zap->kvps, ent, next); in zap_add()
158 if (zap->micro && (intcnt != 1 || intsz != sizeof(uint64_t) || in zap_add()
159 strlen(name) + 1 > MZAP_NAME_LEN || zap->kvpcnt > MZAP_ENT_MAX)) in zap_add()
160 zap->micro = false; in zap_add()
164 zap_add_uint64(zfs_zap_t *zap, const char *name, uint64_t val) in zap_add_uint64() argument
166 zap_add(zap, name, sizeof(uint64_t), 1, (uint8_t *)&val); in zap_add_uint64()
170 zap_add_uint64_self(zfs_zap_t *zap, uint64_t val) in zap_add_uint64_self() argument
175 zap_add(zap, name, sizeof(uint64_t), 1, (uint8_t *)&val); in zap_add_uint64_self()
179 zap_add_string(zfs_zap_t *zap, const char *name, const char *val) in zap_add_string() argument
181 zap_add(zap, name, 1, strlen(val) + 1, val); in zap_add_string()
185 zap_entry_exists(zfs_zap_t *zap, const char *name) in zap_entry_exists() argument
189 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_entry_exists()
197 zap_micro_write(zfs_opt_t *zfs, zfs_zap_t *zap) in zap_micro_write() argument
208 mzap->mz_salt = zap->hashsalt; in zap_micro_write()
211 bytes = sizeof(*mzap) + (zap->kvpcnt - 1) * sizeof(*ment); in zap_micro_write()
215 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_micro_write()
222 loc = objset_space_alloc(zfs, zap->os, &bytes); in zap_micro_write()
224 dnode = zap->dnode; in zap_micro_write()
232 * Write some data to the fat ZAP leaf chunk starting at index "li".
263 zap_fat_write_prefixlen(zfs_zap_t *zap, zap_leaf_t *l) in zap_fat_write_prefixlen() argument
268 if (zap->chunks <= ZAP_LEAF_NUMCHUNKS(l)) { in zap_fat_write_prefixlen()
279 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_fat_write_prefixlen()
314 * Initialize a fat ZAP leaf block.
348 zap_fat_write(zfs_opt_t *zfs, zfs_zap_t *zap) in zap_fat_write() argument
381 zaphdr->zap_num_entries = zap->kvpcnt; in zap_fat_write()
382 zaphdr->zap_salt = zap->hashsalt; in zap_fat_write()
398 prefixlen = zap_fat_write_prefixlen(zap, &l); in zap_fat_write()
414 STAILQ_FOREACH(ent, &zap->kvps, next) { in zap_fat_write()
515 dnode = zap->dnode; in zap_fat_write()
519 c = dnode_cursor_init(zfs, zap->os, zap->dnode, in zap_fat_write()
522 loc = objset_space_alloc(zfs, zap->os, &blksz); in zap_fat_write()
527 loc = objset_space_alloc(zfs, zap->os, &blksz); in zap_fat_write()
538 zap_write(zfs_opt_t *zfs, zfs_zap_t *zap) in zap_write() argument
542 if (zap->micro) { in zap_write()
543 zap_micro_write(zfs, zap); in zap_write()
545 assert(!STAILQ_EMPTY(&zap->kvps)); in zap_write()
546 assert(zap->kvpcnt > 0); in zap_write()
547 zap_fat_write(zfs, zap); in zap_write()
550 while ((ent = STAILQ_FIRST(&zap->kvps)) != NULL) { in zap_write()
551 STAILQ_REMOVE_HEAD(&zap->kvps, next); in zap_write()
557 free(zap); in zap_write()