MCPcopy Create free account
hub / github.com/F-Stack/f-stack / zap_add_impl

Function zap_add_impl

freebsd/contrib/openzfs/module/zfs/zap_micro.c:1224–1261  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1222}
1223
1224static int
1225zap_add_impl(zap_t *zap, const char *key,
1226 int integer_size, uint64_t num_integers,
1227 const void *val, dmu_tx_t *tx, void *tag)
1228{
1229 const uint64_t *intval = val;
1230 int err = 0;
1231
1232 zap_name_t *zn = zap_name_alloc(zap, key, 0);
1233 if (zn == NULL) {
1234 zap_unlockdir(zap, tag);
1235 return (SET_ERROR(ENOTSUP));
1236 }
1237 if (!zap->zap_ismicro) {
1238 err = fzap_add(zn, integer_size, num_integers, val, tag, tx);
1239 zap = zn->zn_zap; /* fzap_add() may change zap */
1240 } else if (integer_size != 8 || num_integers != 1 ||
1241 strlen(key) >= MZAP_NAME_LEN ||
1242 !mze_canfit_fzap_leaf(zn, zn->zn_hash)) {
1243 err = mzap_upgrade(&zn->zn_zap, tag, tx, 0);
1244 if (err == 0) {
1245 err = fzap_add(zn, integer_size, num_integers, val,
1246 tag, tx);
1247 }
1248 zap = zn->zn_zap; /* fzap_add() may change zap */
1249 } else {
1250 if (mze_find(zn) != NULL) {
1251 err = SET_ERROR(EEXIST);
1252 } else {
1253 mzap_addent(zn, *intval);
1254 }
1255 }
1256 ASSERT(zap == zn->zn_zap);
1257 zap_name_free(zn);
1258 if (zap != NULL) /* may be NULL if fzap_add() failed */
1259 zap_unlockdir(zap, tag);
1260 return (err);
1261}
1262
1263int
1264zap_add(objset_t *os, uint64_t zapobj, const char *key,

Callers 2

zap_addFunction · 0.85
zap_add_by_dnodeFunction · 0.85

Calls 8

zap_name_allocFunction · 0.85
zap_unlockdirFunction · 0.85
fzap_addFunction · 0.85
mze_canfit_fzap_leafFunction · 0.85
mzap_upgradeFunction · 0.85
mze_findFunction · 0.85
mzap_addentFunction · 0.85
zap_name_freeFunction · 0.85

Tested by

no test coverage detected