Lines Matching defs:zfs

38 #include "zfs.h"
68 static zfs_dsl_dir_t *dsl_dir_alloc(zfs_opt_t *zfs, const char *name);
69 static zfs_dsl_dataset_t *dsl_dataset_alloc(zfs_opt_t *zfs, zfs_dsl_dir_t *dir);
99 dsl_dir_get_mountpoint(zfs_opt_t *zfs, zfs_dsl_dir_t *dir)
136 assert(strstr(mountpoint, zfs->rootpath) == mountpoint);
155 dsl_dir_set_prop(zfs_opt_t *zfs, zfs_dsl_dir_t *dir, const char *key,
170 if (strcmp(val, zfs->rootpath) != 0 &&
171 strcmp(zfs->rootpath, "/") != 0 &&
172 (strstr(val, zfs->rootpath) != val ||
173 val[strlen(zfs->rootpath)] != '/')) {
175 "the root path `%s'", val, zfs->rootpath);
202 dsl_metadir_alloc(zfs_opt_t *zfs, const char *name)
207 easprintf(&path, "%s/%s", zfs->poolname, name);
208 dir = dsl_dir_alloc(zfs, path);
214 dsl_origindir_init(zfs_opt_t *zfs)
219 zfs->origindsldir = dsl_metadir_alloc(zfs, "$ORIGIN");
220 zfs->originds = dsl_dataset_alloc(zfs, zfs->origindsldir);
221 zfs->snapds = dsl_dataset_alloc(zfs, zfs->origindsldir);
223 clones = objset_dnode_alloc(zfs->mos, DMU_OT_DSL_CLONES, &clonesid);
224 zfs->cloneszap = zap_alloc(zfs->mos, clones);
225 zfs->origindsldir->phys->dd_clones = clonesid;
229 dsl_init(zfs_opt_t *zfs)
237 zfs->rootdsldir = dsl_dir_alloc(zfs, NULL);
239 nvlist_add_uint64(zfs->rootdsldir->propsnv, "compression",
242 zfs->rootds = dsl_dataset_alloc(zfs, zfs->rootdsldir);
243 zfs->rootdsldir->headds = zfs->rootds;
245 zfs->mosdsldir = dsl_metadir_alloc(zfs, "$MOS");
246 zfs->freedsldir = dsl_metadir_alloc(zfs, "$FREE");
247 dsl_origindir_init(zfs);
253 STAILQ_FOREACH(d, &zfs->datasetdescs, next) {
259 if (strcmp(dsname, zfs->poolname) == 0) {
264 dir = zfs->rootdsldir;
269 if (strstr(dsname, zfs->poolname) != dsname ||
271 (size_t)(next - dsname) != strlen(zfs->poolname)) {
273 dsname, zfs->poolname);
275 dir = dsl_dir_alloc(zfs, dsname);
276 dir->headds = dsl_dataset_alloc(zfs, dir);
286 dsl_dir_set_prop(zfs, dir, key, val);
294 if (nvpair_find(zfs->rootdsldir->propsnv, "mountpoint") == NULL) {
295 nvlist_add_string(zfs->rootdsldir->propsnv, "mountpoint",
296 zfs->rootpath);
313 dsl_dir_foreach_post(zfs_opt_t *zfs, zfs_dsl_dir_t *dsldir,
319 dsl_dir_foreach_post(zfs, cdsldir, cb, arg);
321 cb(zfs, dsldir, arg);
328 dsl_dir_foreach(zfs_opt_t *zfs, zfs_dsl_dir_t *dsldir,
331 dsl_dir_foreach_post(zfs, dsldir, cb, arg);
351 dsl_dir_alloc(zfs_opt_t *zfs, const char *name)
361 dnode = objset_dnode_bonus_alloc(zfs->mos, DMU_OT_DSL_DIR,
365 dnode = objset_dnode_alloc(zfs->mos, DMU_OT_DSL_PROPS, &propsid);
366 dir->propszap = zap_alloc(zfs->mos, dnode);
368 dnode = objset_dnode_alloc(zfs->mos, DMU_OT_DSL_DIR_CHILD_MAP,
370 dir->childzap = zap_alloc(zfs->mos, dnode);
382 dir->name = estrdup(zfs->poolname);
383 dir->fullname = estrdup(zfs->poolname);
387 assert(zfs->rootdsldir == NULL);
388 zfs->rootdsldir = dir;
398 STAILQ_INSERT_HEAD(&l, zfs->rootdsldir, next);
438 dsl_dir_root_finalize(zfs_opt_t *zfs, uint64_t bytes)
440 dsl_dir_size_add(zfs->mosdsldir, bytes);
441 zfs->mosdsldir->phys->dd_used_breakdown[DD_USED_HEAD] += bytes;
443 dsl_dir_size_add(zfs->rootdsldir, bytes);
444 zfs->rootdsldir->phys->dd_used_breakdown[DD_USED_CHILD] += bytes;
491 dsl_dir_finalize(zfs_opt_t *zfs, zfs_dsl_dir_t *dir, void *arg __unused)
501 zap_write(zfs, dir->propszap);
502 zap_write(zfs, dir->childzap);
511 snapnames = objset_dnode_alloc(zfs->mos, DMU_OT_DSL_DS_SNAP_MAP,
513 zap_write(zfs, zap_alloc(zfs->mos, snapnames));
516 dir->phys->dd_clone_parent_obj = zfs->snapds->dsid;
517 headds->phys->ds_prev_snap_obj = zfs->snapds->dsid;
521 zfs->snapds->phys->ds_num_children++;
523 zap_add_uint64(zfs->cloneszap, key, headds->dsid);
539 if (dir == zfs->rootdsldir && cdir == zfs->mosdsldir)
551 dsl_write(zfs_opt_t *zfs)
562 dsl_dir_foreach_post(zfs, zfs->rootdsldir, dsl_dir_finalize, NULL);
564 snapnames = objset_dnode_alloc(zfs->mos, DMU_OT_DSL_DS_SNAP_MAP,
566 snapnameszap = zap_alloc(zfs->mos, snapnames);
567 zap_add_uint64(snapnameszap, "$ORIGIN", zfs->snapds->dsid);
568 zap_write(zfs, snapnameszap);
570 zfs->origindsldir->phys->dd_head_dataset_obj = zfs->originds->dsid;
571 zfs->originds->phys->ds_prev_snap_obj = zfs->snapds->dsid;
572 zfs->originds->phys->ds_snapnames_zapobj = snapmapid;
574 zfs->snapds->phys->ds_next_snap_obj = zfs->originds->dsid;
575 assert(zfs->snapds->phys->ds_num_children > 0);
576 zfs->snapds->phys->ds_num_children++;
578 zap_write(zfs, zfs->cloneszap);
584 dsl_dir_dataset_write(zfs_opt_t *zfs, zfs_objset_t *os, zfs_dsl_dir_t *dir)
587 objset_write(zfs, os);
603 dsl_dataset_alloc(zfs_opt_t *zfs, zfs_dsl_dir_t *dir)
611 dnode = objset_dnode_bonus_alloc(zfs->mos, DMU_OT_DSL_DATASET,
615 dnode = objset_dnode_bonus_alloc(zfs->mos, DMU_OT_DEADLIST,
617 zap_write(zfs, zap_alloc(zfs->mos, dnode));
622 if (ds != zfs->snapds)