Lines Matching full:zfs
48 #include "zfs.h"
74 zfs_opt_t *zfs; in zfs_prep_opts() local
78 zfs = aligned_alloc(align, roundup2(sizeof(*zfs), align)); in zfs_prep_opts()
79 if (zfs == NULL) in zfs_prep_opts()
81 memset(zfs, 0, sizeof(*zfs)); in zfs_prep_opts()
84 { '\0', "bootfs", &zfs->bootfs, OPT_STRPTR, in zfs_prep_opts()
86 { '\0', "mssize", &zfs->mssize, OPT_INT64, in zfs_prep_opts()
88 { '\0', "poolname", &zfs->poolname, OPT_STRPTR, in zfs_prep_opts()
89 0, 0, "ZFS pool name" }, in zfs_prep_opts()
90 { '\0', "rootpath", &zfs->rootpath, OPT_STRPTR, in zfs_prep_opts()
92 { '\0', "ashift", &zfs->ashift, OPT_INT32, in zfs_prep_opts()
93 MINBLOCKSHIFT, MAXBLOCKSHIFT, "ZFS pool ashift" }, in zfs_prep_opts()
94 { '\0', "verify-txgs", &zfs->verify_txgs, OPT_BOOL, in zfs_prep_opts()
96 { '\0', "nowarn", &zfs->nowarn, OPT_BOOL, in zfs_prep_opts()
101 STAILQ_INIT(&zfs->datasetdescs); in zfs_prep_opts()
103 fsopts->fs_specific = zfs; in zfs_prep_opts()
110 zfs_opt_t *zfs; in zfs_parse_opts() local
115 zfs = fsopts->fs_specific; in zfs_parse_opts()
130 STAILQ_INSERT_TAIL(&zfs->datasetdescs, dsdesc, next); in zfs_parse_opts()
142 zfs_opt_t *zfs; in zfs_size_vdev() local
145 zfs = fsopts->fs_specific; in zfs_size_vdev()
148 assert(zfs->ashift != 0); in zfs_size_vdev()
153 vdevsize = rounddown2(fsopts->maxsize, 1 << zfs->ashift); in zfs_size_vdev()
158 1 << zfs->ashift); in zfs_size_vdev()
175 mssize = zfs->mssize; in zfs_size_vdev()
197 zfs->asize = asize; in zfs_size_vdev()
198 zfs->vdevsize = vdevsize; in zfs_size_vdev()
199 zfs->mssize = mssize; in zfs_size_vdev()
200 zfs->msshift = flsll(mssize) - 1; in zfs_size_vdev()
201 zfs->mscount = asize / mssize; in zfs_size_vdev()
210 zfs_opt_t *zfs; in zfs_check_opts() local
212 zfs = fsopts->fs_specific; in zfs_check_opts()
219 if (zfs->poolname == NULL) in zfs_check_opts()
221 if (!isalpha(zfs->poolname[0])) in zfs_check_opts()
223 for (size_t i = 0, len = strlen(zfs->poolname); i < len; i++) { in zfs_check_opts()
224 if (!isalnum(zfs->poolname[i]) && zfs->poolname[i] != '_') in zfs_check_opts()
226 zfs->poolname[i]); in zfs_check_opts()
228 if (strcmp(zfs->poolname, "mirror") == 0 || in zfs_check_opts()
229 strcmp(zfs->poolname, "raidz") == 0 || in zfs_check_opts()
230 strcmp(zfs->poolname, "draid") == 0) { in zfs_check_opts()
232 zfs->poolname); in zfs_check_opts()
235 if (zfs->rootpath == NULL) in zfs_check_opts()
236 easprintf(&zfs->rootpath, "/%s", zfs->poolname); in zfs_check_opts()
237 if (zfs->rootpath[0] != '/') in zfs_check_opts()
238 errx(1, "mountpoint `%s' must be absolute", zfs->rootpath); in zfs_check_opts()
240 if (zfs->ashift == 0) in zfs_check_opts()
241 zfs->ashift = 12; in zfs_check_opts()
250 zfs_opt_t *zfs; in zfs_cleanup_opts() local
252 zfs = fsopts->fs_specific; in zfs_cleanup_opts()
253 free(zfs->rootpath); in zfs_cleanup_opts()
254 free(zfs->bootfs); in zfs_cleanup_opts()
255 free(__DECONST(void *, zfs->poolname)); in zfs_cleanup_opts()
256 STAILQ_FOREACH_SAFE(d, &zfs->datasetdescs, next, tmp) { in zfs_cleanup_opts()
260 free(zfs); in zfs_cleanup_opts()
296 pool_config_nvcreate(zfs_opt_t *zfs) in pool_config_nvcreate() argument
304 nvlist_add_string(poolnv, ZPOOL_CONFIG_POOL_NAME, zfs->poolname); in pool_config_nvcreate()
305 nvlist_add_uint64(poolnv, ZPOOL_CONFIG_POOL_GUID, zfs->poolguid); in pool_config_nvcreate()
306 nvlist_add_uint64(poolnv, ZPOOL_CONFIG_TOP_GUID, zfs->vdevguid); in pool_config_nvcreate()
307 nvlist_add_uint64(poolnv, ZPOOL_CONFIG_GUID, zfs->vdevguid); in pool_config_nvcreate()
318 pool_disk_vdev_config_nvcreate(zfs_opt_t *zfs) in pool_disk_vdev_config_nvcreate() argument
322 assert(zfs->objarrid != 0); in pool_disk_vdev_config_nvcreate()
326 nvlist_add_uint64(diskvdevnv, ZPOOL_CONFIG_ASHIFT, zfs->ashift); in pool_disk_vdev_config_nvcreate()
327 nvlist_add_uint64(diskvdevnv, ZPOOL_CONFIG_ASIZE, zfs->asize); in pool_disk_vdev_config_nvcreate()
328 nvlist_add_uint64(diskvdevnv, ZPOOL_CONFIG_GUID, zfs->vdevguid); in pool_disk_vdev_config_nvcreate()
334 zfs->objarrid); in pool_disk_vdev_config_nvcreate()
336 zfs->msshift); in pool_disk_vdev_config_nvcreate()
342 pool_root_vdev_config_nvcreate(zfs_opt_t *zfs) in pool_root_vdev_config_nvcreate() argument
346 diskvdevnv = pool_disk_vdev_config_nvcreate(zfs); in pool_root_vdev_config_nvcreate()
350 nvlist_add_uint64(rootvdevnv, ZPOOL_CONFIG_GUID, zfs->poolguid); in pool_root_vdev_config_nvcreate()
368 pool_init_objdir_config(zfs_opt_t *zfs, zfs_zap_t *objdir) in pool_init_objdir_config() argument
377 dnode = objset_dnode_bonus_alloc(zfs->mos, DMU_OT_PACKED_NVLIST, in pool_init_objdir_config()
380 poolconfig = pool_config_nvcreate(zfs); in pool_init_objdir_config()
382 vdevconfig = pool_root_vdev_config_nvcreate(zfs); in pool_init_objdir_config()
391 configloc = objset_space_alloc(zfs, zfs->mos, &configblksz); in pool_init_objdir_config()
395 vdev_pwrite_dnode_data(zfs, dnode, configbuf, configblksz, configloc); in pool_init_objdir_config()
413 pool_init_objdir_bplists(zfs_opt_t *zfs __unused, zfs_zap_t *objdir) in pool_init_objdir_bplists()
417 (void)objset_dnode_bonus_alloc(zfs->mos, DMU_OT_BPOBJ, DMU_OT_BPOBJ_HDR, in pool_init_objdir_bplists()
421 (void)objset_dnode_bonus_alloc(zfs->mos, DMU_OT_BPOBJ, DMU_OT_BPOBJ_HDR, in pool_init_objdir_bplists()
427 * Add required feature metadata objects. We don't know anything about ZFS
431 pool_init_objdir_feature_maps(zfs_opt_t *zfs, zfs_zap_t *objdir) in pool_init_objdir_feature_maps() argument
436 dnode = objset_dnode_alloc(zfs->mos, DMU_OTN_ZAP_METADATA, &dnid); in pool_init_objdir_feature_maps()
438 zap_write(zfs, zap_alloc(zfs->mos, dnode)); in pool_init_objdir_feature_maps()
440 dnode = objset_dnode_alloc(zfs->mos, DMU_OTN_ZAP_METADATA, &dnid); in pool_init_objdir_feature_maps()
442 zap_write(zfs, zap_alloc(zfs->mos, dnode)); in pool_init_objdir_feature_maps()
444 dnode = objset_dnode_alloc(zfs->mos, DMU_OTN_ZAP_METADATA, &dnid); in pool_init_objdir_feature_maps()
446 zap_write(zfs, zap_alloc(zfs->mos, dnode)); in pool_init_objdir_feature_maps()
450 pool_init_objdir_dsl(zfs_opt_t *zfs, zfs_zap_t *objdir) in pool_init_objdir_dsl() argument
453 dsl_dir_id(zfs->rootdsldir)); in pool_init_objdir_dsl()
457 pool_init_objdir_poolprops(zfs_opt_t *zfs, zfs_zap_t *objdir) in pool_init_objdir_poolprops() argument
462 dnode = objset_dnode_alloc(zfs->mos, DMU_OT_POOL_PROPS, &id); in pool_init_objdir_poolprops()
465 zfs->poolprops = zap_alloc(zfs->mos, dnode); in pool_init_objdir_poolprops()
473 pool_init_objdir(zfs_opt_t *zfs) in pool_init_objdir() argument
478 objdir = objset_dnode_lookup(zfs->mos, DMU_POOL_DIRECTORY_OBJECT); in pool_init_objdir()
480 zap = zap_alloc(zfs->mos, objdir); in pool_init_objdir()
481 pool_init_objdir_config(zfs, zap); in pool_init_objdir()
482 pool_init_objdir_bplists(zfs, zap); in pool_init_objdir()
483 pool_init_objdir_feature_maps(zfs, zap); in pool_init_objdir()
484 pool_init_objdir_dsl(zfs, zap); in pool_init_objdir()
485 pool_init_objdir_poolprops(zfs, zap); in pool_init_objdir()
486 zap_write(zfs, zap); in pool_init_objdir()
540 * L-> space map n (zfs->mscount)
546 pool_init(zfs_opt_t *zfs) in pool_init() argument
550 zfs->poolguid = randomguid(); in pool_init()
551 zfs->vdevguid = randomguid(); in pool_init()
553 zfs->mos = objset_alloc(zfs, DMU_OST_META); in pool_init()
555 (void)objset_dnode_alloc(zfs->mos, DMU_OT_OBJECT_DIRECTORY, &dnid); in pool_init()
558 (void)objset_dnode_alloc(zfs->mos, DMU_OT_OBJECT_ARRAY, &zfs->objarrid); in pool_init()
560 dsl_init(zfs); in pool_init()
562 pool_init_objdir(zfs); in pool_init()
566 pool_labels_write(zfs_opt_t *zfs) in pool_labels_write() argument
578 poolconfig = pool_config_nvcreate(zfs); in pool_labels_write()
579 vdevconfig = pool_disk_vdev_config_nvcreate(zfs); in pool_labels_write()
595 uoff += (1 << zfs->ashift)) { in pool_labels_write()
609 if (!zfs->verify_txgs) in pool_labels_write()
611 ub->ub_guid_sum = zfs->poolguid + zfs->vdevguid; in pool_labels_write()
619 objset_root_blkptr_copy(zfs->mos, &ub->ub_rootbp); in pool_labels_write()
627 vdev_label_write(zfs, i, label); in pool_labels_write()
633 pool_fini(zfs_opt_t *zfs) in pool_fini() argument
635 zap_write(zfs, zfs->poolprops); in pool_fini()
636 dsl_write(zfs); in pool_fini()
637 objset_write(zfs, zfs->mos); in pool_fini()
638 pool_labels_write(zfs); in pool_fini()
642 dnode_cursor_init(zfs_opt_t *zfs, zfs_objset_t *os, dnode_phys_t *dnode, in dnode_cursor_init() argument
653 blksz = MIN(MAXBLOCKSIZE, MAX(1 << zfs->ashift, in dnode_cursor_init()
679 c->indloc = objset_space_alloc(zfs, os, &c->indspace); in dnode_cursor_init()
689 _dnode_cursor_flush(zfs_opt_t *zfs, struct dnode_cursor *c, unsigned int levels) in _dnode_cursor_flush() argument
728 vdev_pwrite_dnode_indir(zfs, c->dnode, level, fill, buf, blksz, in _dnode_cursor_flush()
737 dnode_cursor_next(zfs_opt_t *zfs, struct dnode_cursor *c, off_t off) in dnode_cursor_next() argument
758 _dnode_cursor_flush(zfs, c, levels); in dnode_cursor_next()
767 dnode_cursor_finish(zfs_opt_t *zfs, struct dnode_cursor *c) in dnode_cursor_finish() argument
774 _dnode_cursor_flush(zfs, c, levels); in dnode_cursor_finish()
782 zfs_opt_t *zfs; in zfs_makefs() local
785 zfs = fsopts->fs_specific; in zfs_makefs()
799 vdev_init(zfs, image); in zfs_makefs()
800 pool_init(zfs); in zfs_makefs()
801 fs_build(zfs, dirfd, root); in zfs_makefs()
802 pool_fini(zfs); in zfs_makefs()
803 vdev_fini(zfs); in zfs_makefs()