Lines Matching full:os
96 static void dmu_objset_upgrade(objset_t *os, dmu_objset_upgrade_cb_t cb);
97 static void dmu_objset_upgrade_stop(objset_t *os);
112 dmu_objset_spa(objset_t *os) in dmu_objset_spa() argument
114 return (os->os_spa); in dmu_objset_spa()
118 dmu_objset_zil(objset_t *os) in dmu_objset_zil() argument
120 return (os->os_zil); in dmu_objset_zil()
124 dmu_objset_pool(objset_t *os) in dmu_objset_pool() argument
128 if ((ds = os->os_dsl_dataset) != NULL && ds->ds_dir) in dmu_objset_pool()
131 return (spa_get_dsl(os->os_spa)); in dmu_objset_pool()
135 dmu_objset_ds(objset_t *os) in dmu_objset_ds() argument
137 return (os->os_dsl_dataset); in dmu_objset_ds()
141 dmu_objset_type(objset_t *os) in dmu_objset_type() argument
143 return (os->os_phys->os_type); in dmu_objset_type()
147 dmu_objset_name(objset_t *os, char *buf) in dmu_objset_name() argument
149 dsl_dataset_name(os->os_dsl_dataset, buf); in dmu_objset_name()
153 dmu_objset_id(objset_t *os) in dmu_objset_id() argument
155 dsl_dataset_t *ds = os->os_dsl_dataset; in dmu_objset_id()
161 dmu_objset_dnodesize(objset_t *os) in dmu_objset_dnodesize() argument
163 return (os->os_dnodesize); in dmu_objset_dnodesize()
167 dmu_objset_syncprop(objset_t *os) in dmu_objset_syncprop() argument
169 return (os->os_sync); in dmu_objset_syncprop()
173 dmu_objset_logbias(objset_t *os) in dmu_objset_logbias() argument
175 return (os->os_logbias); in dmu_objset_logbias()
181 objset_t *os = arg; in checksum_changed_cb() local
188 os->os_checksum = zio_checksum_select(newval, ZIO_CHECKSUM_ON_VALUE); in checksum_changed_cb()
194 objset_t *os = arg; in compression_changed_cb() local
201 os->os_compress = zio_compress_select(os->os_spa, in compression_changed_cb()
203 os->os_complevel = zio_complevel_select(os->os_spa, os->os_compress, in compression_changed_cb()
210 objset_t *os = arg; in copies_changed_cb() local
216 ASSERT(newval <= spa_max_replication(os->os_spa)); in copies_changed_cb()
218 os->os_copies = newval; in copies_changed_cb()
224 objset_t *os = arg; in dedup_changed_cb() local
225 spa_t *spa = os->os_spa; in dedup_changed_cb()
235 os->os_dedup_checksum = checksum & ZIO_CHECKSUM_MASK; in dedup_changed_cb()
236 os->os_dedup_verify = !!(checksum & ZIO_CHECKSUM_VERIFY); in dedup_changed_cb()
242 objset_t *os = arg; in primary_cache_changed_cb() local
250 os->os_primary_cache = newval; in primary_cache_changed_cb()
256 objset_t *os = arg; in secondary_cache_changed_cb() local
264 os->os_secondary_cache = newval; in secondary_cache_changed_cb()
270 objset_t *os = arg; in prefetch_changed_cb() local
277 os->os_prefetch = newval; in prefetch_changed_cb()
283 objset_t *os = arg; in sync_changed_cb() local
291 os->os_sync = newval; in sync_changed_cb()
292 if (os->os_zil) in sync_changed_cb()
293 zil_set_sync(os->os_zil, newval); in sync_changed_cb()
299 objset_t *os = arg; in redundant_metadata_changed_cb() local
309 os->os_redundant_metadata = newval; in redundant_metadata_changed_cb()
315 objset_t *os = arg; in dnodesize_changed_cb() local
319 os->os_dnodesize = DNODE_MIN_SIZE; in dnodesize_changed_cb()
328 os->os_dnodesize = DNODE_MIN_SIZE * 2; in dnodesize_changed_cb()
335 os->os_dnodesize = newval; in dnodesize_changed_cb()
343 objset_t *os = arg; in smallblk_changed_cb() local
351 os->os_zpl_special_smallblock = newval; in smallblk_changed_cb()
357 objset_t *os = arg; in direct_changed_cb() local
365 os->os_direct = newval; in direct_changed_cb()
371 objset_t *os = arg; in logbias_changed_cb() local
375 os->os_logbias = newval; in logbias_changed_cb()
376 if (os->os_zil) in logbias_changed_cb()
377 zil_set_logbias(os->os_zil, newval); in logbias_changed_cb()
383 objset_t *os = arg; in recordsize_changed_cb() local
385 os->os_recordsize = newval; in recordsize_changed_cb()
411 dnode_hash(const objset_t *os, uint64_t obj) in dnode_hash() argument
413 uintptr_t osv = (uintptr_t)os; in dnode_hash()
434 dmu_os_is_l2cacheable(objset_t *os) in dmu_os_is_l2cacheable() argument
436 if (os->os_secondary_cache == ZFS_CACHE_ALL || in dmu_os_is_l2cacheable()
437 os->os_secondary_cache == ZFS_CACHE_METADATA) { in dmu_os_is_l2cacheable()
441 blkptr_t *bp = os->os_rootbp; in dmu_os_is_l2cacheable()
445 vdev_t *rvd = os->os_spa->spa_root_vdev; in dmu_os_is_l2cacheable()
469 objset_t *os; in dmu_objset_open_impl() local
491 os = kmem_zalloc(sizeof (objset_t), KM_SLEEP); in dmu_objset_open_impl()
492 os->os_dsl_dataset = ds; in dmu_objset_open_impl()
493 os->os_spa = spa; in dmu_objset_open_impl()
494 os->os_rootbp = bp; in dmu_objset_open_impl()
495 if (!BP_IS_HOLE(os->os_rootbp)) { in dmu_objset_open_impl()
503 if (dmu_os_is_l2cacheable(os)) in dmu_objset_open_impl()
512 dprintf_bp(os->os_rootbp, "reading %s", ""); in dmu_objset_open_impl()
513 err = arc_read(NULL, spa, os->os_rootbp, in dmu_objset_open_impl()
514 arc_getbuf_func, &os->os_phys_buf, in dmu_objset_open_impl()
517 kmem_free(os, sizeof (objset_t)); in dmu_objset_open_impl()
533 if (arc_buf_size(os->os_phys_buf) < size) { in dmu_objset_open_impl()
534 arc_buf_t *buf = arc_alloc_buf(spa, &os->os_phys_buf, in dmu_objset_open_impl()
537 memcpy(buf->b_data, os->os_phys_buf->b_data, in dmu_objset_open_impl()
538 arc_buf_size(os->os_phys_buf)); in dmu_objset_open_impl()
539 arc_buf_destroy(os->os_phys_buf, &os->os_phys_buf); in dmu_objset_open_impl()
540 os->os_phys_buf = buf; in dmu_objset_open_impl()
543 os->os_phys = os->os_phys_buf->b_data; in dmu_objset_open_impl()
544 os->os_flags = os->os_phys->os_flags; in dmu_objset_open_impl()
548 os->os_phys_buf = arc_alloc_buf(spa, &os->os_phys_buf, in dmu_objset_open_impl()
550 os->os_phys = os->os_phys_buf->b_data; in dmu_objset_open_impl()
551 memset(os->os_phys, 0, size); in dmu_objset_open_impl()
557 os->os_version = OBJSET_PROP_UNINITIALIZED; in dmu_objset_open_impl()
558 os->os_normalization = OBJSET_PROP_UNINITIALIZED; in dmu_objset_open_impl()
559 os->os_utf8only = OBJSET_PROP_UNINITIALIZED; in dmu_objset_open_impl()
560 os->os_casesensitivity = OBJSET_PROP_UNINITIALIZED; in dmu_objset_open_impl()
569 os->os_encrypted = (ds->ds_dir->dd_crypto_obj != 0); in dmu_objset_open_impl()
573 primary_cache_changed_cb, os); in dmu_objset_open_impl()
577 secondary_cache_changed_cb, os); in dmu_objset_open_impl()
582 prefetch_changed_cb, os); in dmu_objset_open_impl()
588 checksum_changed_cb, os); in dmu_objset_open_impl()
593 compression_changed_cb, os); in dmu_objset_open_impl()
598 copies_changed_cb, os); in dmu_objset_open_impl()
603 dedup_changed_cb, os); in dmu_objset_open_impl()
608 logbias_changed_cb, os); in dmu_objset_open_impl()
613 sync_changed_cb, os); in dmu_objset_open_impl()
619 redundant_metadata_changed_cb, os); in dmu_objset_open_impl()
624 recordsize_changed_cb, os); in dmu_objset_open_impl()
629 dnodesize_changed_cb, os); in dmu_objset_open_impl()
635 smallblk_changed_cb, os); in dmu_objset_open_impl()
640 direct_changed_cb, os); in dmu_objset_open_impl()
644 arc_buf_destroy(os->os_phys_buf, &os->os_phys_buf); in dmu_objset_open_impl()
645 kmem_free(os, sizeof (objset_t)); in dmu_objset_open_impl()
650 os->os_checksum = ZIO_CHECKSUM_FLETCHER_4; in dmu_objset_open_impl()
651 os->os_compress = ZIO_COMPRESS_ON; in dmu_objset_open_impl()
652 os->os_complevel = ZIO_COMPLEVEL_DEFAULT; in dmu_objset_open_impl()
653 os->os_encrypted = B_FALSE; in dmu_objset_open_impl()
654 os->os_copies = spa_max_replication(spa); in dmu_objset_open_impl()
655 os->os_dedup_checksum = ZIO_CHECKSUM_OFF; in dmu_objset_open_impl()
656 os->os_dedup_verify = B_FALSE; in dmu_objset_open_impl()
657 os->os_logbias = ZFS_LOGBIAS_LATENCY; in dmu_objset_open_impl()
658 os->os_sync = ZFS_SYNC_STANDARD; in dmu_objset_open_impl()
659 os->os_primary_cache = ZFS_CACHE_ALL; in dmu_objset_open_impl()
660 os->os_secondary_cache = ZFS_CACHE_ALL; in dmu_objset_open_impl()
661 os->os_dnodesize = DNODE_MIN_SIZE; in dmu_objset_open_impl()
662 os->os_prefetch = ZFS_PREFETCH_ALL; in dmu_objset_open_impl()
666 os->os_zil_header = os->os_phys->os_zil_header; in dmu_objset_open_impl()
667 os->os_zil = zil_alloc(os, &os->os_zil_header); in dmu_objset_open_impl()
670 multilist_create(&os->os_dirty_dnodes[i], sizeof (dnode_t), in dmu_objset_open_impl()
674 list_create(&os->os_dnodes, sizeof (dnode_t), in dmu_objset_open_impl()
676 list_create(&os->os_downgraded_dbufs, sizeof (dmu_buf_impl_t), in dmu_objset_open_impl()
679 list_link_init(&os->os_evicting_node); in dmu_objset_open_impl()
681 mutex_init(&os->os_lock, NULL, MUTEX_DEFAULT, NULL); in dmu_objset_open_impl()
682 mutex_init(&os->os_userused_lock, NULL, MUTEX_DEFAULT, NULL); in dmu_objset_open_impl()
683 mutex_init(&os->os_obj_lock, NULL, MUTEX_DEFAULT, NULL); in dmu_objset_open_impl()
684 mutex_init(&os->os_user_ptr_lock, NULL, MUTEX_DEFAULT, NULL); in dmu_objset_open_impl()
685 os->os_obj_next_percpu_len = boot_ncpus; in dmu_objset_open_impl()
686 os->os_obj_next_percpu = kmem_zalloc(os->os_obj_next_percpu_len * in dmu_objset_open_impl()
687 sizeof (os->os_obj_next_percpu[0]), KM_SLEEP); in dmu_objset_open_impl()
689 dnode_special_open(os, &os->os_phys->os_meta_dnode, in dmu_objset_open_impl()
690 DMU_META_DNODE_OBJECT, &os->os_meta_dnode); in dmu_objset_open_impl()
691 if (OBJSET_BUF_HAS_USERUSED(os->os_phys_buf)) { in dmu_objset_open_impl()
692 dnode_special_open(os, &os->os_phys->os_userused_dnode, in dmu_objset_open_impl()
693 DMU_USERUSED_OBJECT, &os->os_userused_dnode); in dmu_objset_open_impl()
694 dnode_special_open(os, &os->os_phys->os_groupused_dnode, in dmu_objset_open_impl()
695 DMU_GROUPUSED_OBJECT, &os->os_groupused_dnode); in dmu_objset_open_impl()
696 if (OBJSET_BUF_HAS_PROJECTUSED(os->os_phys_buf)) in dmu_objset_open_impl()
697 dnode_special_open(os, in dmu_objset_open_impl()
698 &os->os_phys->os_projectused_dnode, in dmu_objset_open_impl()
699 DMU_PROJECTUSED_OBJECT, &os->os_projectused_dnode); in dmu_objset_open_impl()
702 mutex_init(&os->os_upgrade_lock, NULL, MUTEX_DEFAULT, NULL); in dmu_objset_open_impl()
704 *osp = os; in dmu_objset_open_impl()
722 objset_t *os; in dmu_objset_from_ds() local
725 ds, dsl_dataset_get_blkptr(ds), &os); in dmu_objset_from_ds()
731 ds->ds_objset = os; in dmu_objset_from_ds()
796 /* if we are decrypting, we can now check MACs in os->os_phys_buf */ in dmu_objset_own_impl()
886 dmu_objset_rele_flags(objset_t *os, boolean_t decrypt, const void *tag) in dmu_objset_rele_flags() argument
889 dsl_pool_t *dp = dmu_objset_pool(os); in dmu_objset_rele_flags()
892 dsl_dataset_rele_flags(os->os_dsl_dataset, flags, tag); in dmu_objset_rele_flags()
897 dmu_objset_rele(objset_t *os, const void *tag) in dmu_objset_rele() argument
899 dmu_objset_rele_flags(os, B_FALSE, tag); in dmu_objset_rele()
903 * When we are called, os MUST refer to an objset associated with a dataset
935 dmu_objset_disown(objset_t *os, boolean_t decrypt, const void *tag) in dmu_objset_disown() argument
943 dmu_objset_upgrade_stop(os); in dmu_objset_disown()
944 dsl_dataset_disown(os->os_dsl_dataset, flags, tag); in dmu_objset_disown()
948 dmu_objset_evict_dbufs(objset_t *os) in dmu_objset_evict_dbufs() argument
955 mutex_enter(&os->os_lock); in dmu_objset_evict_dbufs()
956 dn = list_head(&os->os_dnodes); in dmu_objset_evict_dbufs()
964 list_insert_after(&os->os_dnodes, dn, dn_marker); in dmu_objset_evict_dbufs()
965 mutex_exit(&os->os_lock); in dmu_objset_evict_dbufs()
970 mutex_enter(&os->os_lock); in dmu_objset_evict_dbufs()
971 dn = list_next(&os->os_dnodes, dn_marker); in dmu_objset_evict_dbufs()
972 list_remove(&os->os_dnodes, dn_marker); in dmu_objset_evict_dbufs()
974 dn = list_next(&os->os_dnodes, dn); in dmu_objset_evict_dbufs()
977 mutex_exit(&os->os_lock); in dmu_objset_evict_dbufs()
981 if (DMU_USERUSED_DNODE(os) != NULL) { in dmu_objset_evict_dbufs()
982 if (DMU_PROJECTUSED_DNODE(os) != NULL) in dmu_objset_evict_dbufs()
983 dnode_evict_dbufs(DMU_PROJECTUSED_DNODE(os)); in dmu_objset_evict_dbufs()
984 dnode_evict_dbufs(DMU_GROUPUSED_DNODE(os)); in dmu_objset_evict_dbufs()
985 dnode_evict_dbufs(DMU_USERUSED_DNODE(os)); in dmu_objset_evict_dbufs()
987 dnode_evict_dbufs(DMU_META_DNODE(os)); in dmu_objset_evict_dbufs()
994 * second phase of eviction. Once os->os_dnodes has been cleared by
1001 * objset to have no holds even though os->os_dnodes is not empty.
1004 dmu_objset_evict(objset_t *os) in dmu_objset_evict() argument
1006 dsl_dataset_t *ds = os->os_dsl_dataset; in dmu_objset_evict()
1009 ASSERT(!dmu_objset_is_dirty(os, t)); in dmu_objset_evict()
1012 dsl_prop_unregister_all(ds, os); in dmu_objset_evict()
1014 if (os->os_sa) in dmu_objset_evict()
1015 sa_tear_down(os); in dmu_objset_evict()
1017 dmu_objset_evict_dbufs(os); in dmu_objset_evict()
1019 mutex_enter(&os->os_lock); in dmu_objset_evict()
1020 spa_evicting_os_register(os->os_spa, os); in dmu_objset_evict()
1021 if (list_is_empty(&os->os_dnodes)) { in dmu_objset_evict()
1022 mutex_exit(&os->os_lock); in dmu_objset_evict()
1023 dmu_objset_evict_done(os); in dmu_objset_evict()
1025 mutex_exit(&os->os_lock); in dmu_objset_evict()
1032 dmu_objset_evict_done(objset_t *os) in dmu_objset_evict_done() argument
1034 ASSERT3P(list_head(&os->os_dnodes), ==, NULL); in dmu_objset_evict_done()
1036 dnode_special_close(&os->os_meta_dnode); in dmu_objset_evict_done()
1037 if (DMU_USERUSED_DNODE(os)) { in dmu_objset_evict_done()
1038 if (DMU_PROJECTUSED_DNODE(os)) in dmu_objset_evict_done()
1039 dnode_special_close(&os->os_projectused_dnode); in dmu_objset_evict_done()
1040 dnode_special_close(&os->os_userused_dnode); in dmu_objset_evict_done()
1041 dnode_special_close(&os->os_groupused_dnode); in dmu_objset_evict_done()
1043 zil_free(os->os_zil); in dmu_objset_evict_done()
1045 arc_buf_destroy(os->os_phys_buf, &os->os_phys_buf); in dmu_objset_evict_done()
1056 kmem_free(os->os_obj_next_percpu, in dmu_objset_evict_done()
1057 os->os_obj_next_percpu_len * sizeof (os->os_obj_next_percpu[0])); in dmu_objset_evict_done()
1059 mutex_destroy(&os->os_lock); in dmu_objset_evict_done()
1060 mutex_destroy(&os->os_userused_lock); in dmu_objset_evict_done()
1061 mutex_destroy(&os->os_obj_lock); in dmu_objset_evict_done()
1062 mutex_destroy(&os->os_user_ptr_lock); in dmu_objset_evict_done()
1063 mutex_destroy(&os->os_upgrade_lock); in dmu_objset_evict_done()
1065 multilist_destroy(&os->os_dirty_dnodes[i]); in dmu_objset_evict_done()
1066 spa_evicting_os_deregister(os->os_spa, os); in dmu_objset_evict_done()
1067 kmem_free(os, sizeof (objset_t)); in dmu_objset_evict_done()
1071 dmu_objset_snap_cmtime(objset_t *os) in dmu_objset_snap_cmtime() argument
1073 return (dsl_dir_snap_cmtime(os->os_dsl_dataset->ds_dir)); in dmu_objset_snap_cmtime()
1080 objset_t *os; in dmu_objset_create_impl_dnstats() local
1091 VERIFY0(dmu_objset_from_ds(ds, &os)); in dmu_objset_create_impl_dnstats()
1093 VERIFY0(dmu_objset_open_impl(spa, NULL, bp, &os)); in dmu_objset_create_impl_dnstats()
1095 mdn = DMU_META_DNODE(os); in dmu_objset_create_impl_dnstats()
1139 os->os_phys->os_type = type; in dmu_objset_create_impl_dnstats()
1145 if (dmu_objset_userused_enabled(os) && in dmu_objset_create_impl_dnstats()
1146 (!os->os_encrypted || !dmu_objset_is_receiving(os))) { in dmu_objset_create_impl_dnstats()
1147 os->os_phys->os_flags |= OBJSET_FLAG_USERACCOUNTING_COMPLETE; in dmu_objset_create_impl_dnstats()
1148 if (dmu_objset_userobjused_enabled(os)) { in dmu_objset_create_impl_dnstats()
1152 os->os_phys->os_flags |= in dmu_objset_create_impl_dnstats()
1155 if (dmu_objset_projectquota_enabled(os)) { in dmu_objset_create_impl_dnstats()
1159 os->os_phys->os_flags |= in dmu_objset_create_impl_dnstats()
1162 os->os_flags = os->os_phys->os_flags; in dmu_objset_create_impl_dnstats()
1167 return (os); in dmu_objset_create_impl_dnstats()
1182 void (*doca_userfunc)(objset_t *os, void *arg,
1266 objset_t *os; in dmu_objset_create_sync() local
1278 os = dmu_objset_create_impl(spa, ds, bp, doca->doca_type, tx); in dmu_objset_create_sync()
1282 doca->doca_userfunc(os, doca->doca_userarg, in dmu_objset_create_sync()
1294 if (os->os_encrypted) { in dmu_objset_create_sync()
1311 dmu_objset_sync_done(os, tx); in dmu_objset_create_sync()
1499 objset_t *os = data; in dmu_objset_upgrade_task_cb() local
1501 mutex_enter(&os->os_upgrade_lock); in dmu_objset_upgrade_task_cb()
1502 os->os_upgrade_status = EINTR; in dmu_objset_upgrade_task_cb()
1503 if (!os->os_upgrade_exit) { in dmu_objset_upgrade_task_cb()
1506 mutex_exit(&os->os_upgrade_lock); in dmu_objset_upgrade_task_cb()
1508 status = os->os_upgrade_cb(os); in dmu_objset_upgrade_task_cb()
1510 mutex_enter(&os->os_upgrade_lock); in dmu_objset_upgrade_task_cb()
1512 os->os_upgrade_status = status; in dmu_objset_upgrade_task_cb()
1514 os->os_upgrade_exit = B_TRUE; in dmu_objset_upgrade_task_cb()
1515 os->os_upgrade_id = 0; in dmu_objset_upgrade_task_cb()
1516 mutex_exit(&os->os_upgrade_lock); in dmu_objset_upgrade_task_cb()
1517 dsl_dataset_long_rele(dmu_objset_ds(os), upgrade_tag); in dmu_objset_upgrade_task_cb()
1521 dmu_objset_upgrade(objset_t *os, dmu_objset_upgrade_cb_t cb) in dmu_objset_upgrade() argument
1523 if (os->os_upgrade_id != 0) in dmu_objset_upgrade()
1526 ASSERT(dsl_pool_config_held(dmu_objset_pool(os))); in dmu_objset_upgrade()
1527 dsl_dataset_long_hold(dmu_objset_ds(os), upgrade_tag); in dmu_objset_upgrade()
1529 mutex_enter(&os->os_upgrade_lock); in dmu_objset_upgrade()
1530 if (os->os_upgrade_id == 0 && os->os_upgrade_status == 0) { in dmu_objset_upgrade()
1531 os->os_upgrade_exit = B_FALSE; in dmu_objset_upgrade()
1532 os->os_upgrade_cb = cb; in dmu_objset_upgrade()
1533 os->os_upgrade_id = taskq_dispatch( in dmu_objset_upgrade()
1534 os->os_spa->spa_upgrade_taskq, in dmu_objset_upgrade()
1535 dmu_objset_upgrade_task_cb, os, TQ_SLEEP); in dmu_objset_upgrade()
1536 if (os->os_upgrade_id == TASKQID_INVALID) { in dmu_objset_upgrade()
1537 dsl_dataset_long_rele(dmu_objset_ds(os), upgrade_tag); in dmu_objset_upgrade()
1538 os->os_upgrade_status = ENOMEM; in dmu_objset_upgrade()
1541 dsl_dataset_long_rele(dmu_objset_ds(os), upgrade_tag); in dmu_objset_upgrade()
1543 mutex_exit(&os->os_upgrade_lock); in dmu_objset_upgrade()
1547 dmu_objset_upgrade_stop(objset_t *os) in dmu_objset_upgrade_stop() argument
1549 mutex_enter(&os->os_upgrade_lock); in dmu_objset_upgrade_stop()
1550 os->os_upgrade_exit = B_TRUE; in dmu_objset_upgrade_stop()
1551 if (os->os_upgrade_id != 0) { in dmu_objset_upgrade_stop()
1552 taskqid_t id = os->os_upgrade_id; in dmu_objset_upgrade_stop()
1554 os->os_upgrade_id = 0; in dmu_objset_upgrade_stop()
1555 mutex_exit(&os->os_upgrade_lock); in dmu_objset_upgrade_stop()
1557 if ((taskq_cancel_id(os->os_spa->spa_upgrade_taskq, id)) == 0) { in dmu_objset_upgrade_stop()
1558 dsl_dataset_long_rele(dmu_objset_ds(os), upgrade_tag); in dmu_objset_upgrade_stop()
1560 txg_wait_synced(os->os_spa->spa_dsl_pool, 0); in dmu_objset_upgrade_stop()
1562 mutex_exit(&os->os_upgrade_lock); in dmu_objset_upgrade_stop()
1602 objset_t *os = arg; in dmu_objset_write_ready() local
1603 dnode_phys_t *dnp = &os->os_phys->os_meta_dnode; in dmu_objset_write_ready()
1621 if (os->os_dsl_dataset != NULL) in dmu_objset_write_ready()
1622 rrw_enter(&os->os_dsl_dataset->ds_bp_rwlock, RW_WRITER, FTAG); in dmu_objset_write_ready()
1623 *os->os_rootbp = *bp; in dmu_objset_write_ready()
1624 if (os->os_dsl_dataset != NULL) in dmu_objset_write_ready()
1625 rrw_exit(&os->os_dsl_dataset->ds_bp_rwlock, FTAG); in dmu_objset_write_ready()
1634 objset_t *os = arg; in dmu_objset_write_done() local
1639 dsl_dataset_t *ds = os->os_dsl_dataset; in dmu_objset_write_done()
1640 dmu_tx_t *tx = os->os_synctx; in dmu_objset_write_done()
1671 objset_t *os = soa->soa_os; in sync_dnodes_task() local
1673 uint_t allocator = spa_acq_allocator(os->os_spa); in sync_dnodes_task()
1680 spa_rel_allocator(os->os_spa, allocator); in sync_dnodes_task()
1692 taskq_dispatch_ent(dmu_objset_pool(os)->dp_sync_taskq, in sync_dnodes_task()
1705 objset_t *os = soa->soa_os; in sync_meta_dnode_task() local
1712 list_t *list = &DMU_META_DNODE(os)->dn_dirty_records[txgoff]; in sync_meta_dnode_task()
1719 if (os->os_freed_dnodes >= dmu_rescan_dnode_threshold) { in sync_meta_dnode_task()
1720 os->os_rescan_dnodes = B_TRUE; in sync_meta_dnode_task()
1721 os->os_freed_dnodes = 0; in sync_meta_dnode_task()
1727 zil_sync(os->os_zil, tx); in sync_meta_dnode_task()
1728 os->os_phys->os_zil_header = os->os_zil_header; in sync_meta_dnode_task()
1737 dmu_objset_sync(objset_t *os, zio_t *pio, dmu_tx_t *tx) in dmu_objset_sync() argument
1745 blkptr_t *blkptr_copy = kmem_alloc(sizeof (*os->os_rootbp), KM_SLEEP); in dmu_objset_sync()
1746 *blkptr_copy = *os->os_rootbp; in dmu_objset_sync()
1748 dprintf_ds(os->os_dsl_dataset, "txg=%llu\n", (u_longlong_t)tx->tx_txg); in dmu_objset_sync()
1752 os->os_synctx = tx; in dmu_objset_sync()
1754 if (os->os_dsl_dataset == NULL) { in dmu_objset_sync()
1760 os->os_copies = spa_max_replication(os->os_spa); in dmu_objset_sync()
1766 SET_BOOKMARK(&zb, os->os_dsl_dataset ? in dmu_objset_sync()
1767 os->os_dsl_dataset->ds_object : DMU_META_OBJSET, in dmu_objset_sync()
1769 arc_release(os->os_phys_buf, &os->os_phys_buf); in dmu_objset_sync()
1771 dmu_write_policy(os, NULL, 0, 0, &zp); in dmu_objset_sync()
1778 if (os->os_raw_receive || in dmu_objset_sync()
1779 os->os_next_write_raw[tx->tx_txg & TXG_MASK]) { in dmu_objset_sync()
1780 ASSERT(os->os_encrypted); in dmu_objset_sync()
1781 arc_convert_to_raw(os->os_phys_buf, in dmu_objset_sync()
1782 os->os_dsl_dataset->ds_object, ZFS_HOST_BYTEORDER, in dmu_objset_sync()
1786 zio = arc_write(pio, os->os_spa, tx->tx_txg, in dmu_objset_sync()
1787 blkptr_copy, os->os_phys_buf, B_FALSE, dmu_os_is_l2cacheable(os), in dmu_objset_sync()
1789 os, ZIO_PRIORITY_ASYNC_WRITE, ZIO_FLAG_MUSTSUCCEED, &zb); in dmu_objset_sync()
1794 DMU_META_DNODE(os)->dn_zio = zio; in dmu_objset_sync()
1795 dnode_sync(DMU_META_DNODE(os), tx); in dmu_objset_sync()
1797 os->os_phys->os_flags = os->os_flags; in dmu_objset_sync()
1799 if (DMU_USERUSED_DNODE(os) && in dmu_objset_sync()
1800 DMU_USERUSED_DNODE(os)->dn_type != DMU_OT_NONE) { in dmu_objset_sync()
1801 DMU_USERUSED_DNODE(os)->dn_zio = zio; in dmu_objset_sync()
1802 dnode_sync(DMU_USERUSED_DNODE(os), tx); in dmu_objset_sync()
1803 DMU_GROUPUSED_DNODE(os)->dn_zio = zio; in dmu_objset_sync()
1804 dnode_sync(DMU_GROUPUSED_DNODE(os), tx); in dmu_objset_sync()
1807 if (DMU_PROJECTUSED_DNODE(os) && in dmu_objset_sync()
1808 DMU_PROJECTUSED_DNODE(os)->dn_type != DMU_OT_NONE) { in dmu_objset_sync()
1809 DMU_PROJECTUSED_DNODE(os)->dn_zio = zio; in dmu_objset_sync()
1810 dnode_sync(DMU_PROJECTUSED_DNODE(os), tx); in dmu_objset_sync()
1820 if (os->os_synced_dnodes.ml_sublists == NULL) { in dmu_objset_sync()
1821 multilist_create(&os->os_synced_dnodes, sizeof (dnode_t), in dmu_objset_sync()
1825 ASSERT3U(os->os_synced_dnodes.ml_offset, ==, in dmu_objset_sync()
1836 soa->soa_os = os; in dmu_objset_sync()
1841 ml = &os->os_dirty_dnodes[txgoff]; in dmu_objset_sync()
1850 taskq_dispatch_ent(dmu_objset_pool(os)->dp_sync_taskq, in dmu_objset_sync()
1867 dmu_objset_pool(os)->dp_sync_taskq, in dmu_objset_sync()
1875 dmu_objset_is_dirty(objset_t *os, uint64_t txg) in dmu_objset_is_dirty() argument
1877 return (!multilist_is_empty(&os->os_dirty_dnodes[txg & TXG_MASK])); in dmu_objset_is_dirty()
1889 dmu_get_file_info(objset_t *os, dmu_object_type_t bonustype, const void *data, in dmu_get_file_info() argument
1892 file_info_cb_t *cb = file_cbs[os->os_phys->os_type]; in dmu_get_file_info()
1899 dmu_objset_userused_enabled(objset_t *os) in dmu_objset_userused_enabled() argument
1901 return (spa_version(os->os_spa) >= SPA_VERSION_USERSPACE && in dmu_objset_userused_enabled()
1902 file_cbs[os->os_phys->os_type] != NULL && in dmu_objset_userused_enabled()
1903 DMU_USERUSED_DNODE(os) != NULL); in dmu_objset_userused_enabled()
1907 dmu_objset_userobjused_enabled(objset_t *os) in dmu_objset_userobjused_enabled() argument
1909 return (dmu_objset_userused_enabled(os) && in dmu_objset_userobjused_enabled()
1910 spa_feature_is_enabled(os->os_spa, SPA_FEATURE_USEROBJ_ACCOUNTING)); in dmu_objset_userobjused_enabled()
1914 dmu_objset_projectquota_enabled(objset_t *os) in dmu_objset_projectquota_enabled() argument
1916 return (file_cbs[os->os_phys->os_type] != NULL && in dmu_objset_projectquota_enabled()
1917 DMU_PROJECTUSED_DNODE(os) != NULL && in dmu_objset_projectquota_enabled()
1918 spa_feature_is_enabled(os->os_spa, SPA_FEATURE_PROJECT_QUOTA)); in dmu_objset_projectquota_enabled()
1951 do_userquota_cacheflush(objset_t *os, userquota_cache_t *cache, dmu_tx_t *tx) in do_userquota_cacheflush() argument
1966 mutex_enter(&os->os_userused_lock); in do_userquota_cacheflush()
1967 VERIFY0(zap_increment(os, DMU_USERUSED_OBJECT, in do_userquota_cacheflush()
1969 mutex_exit(&os->os_userused_lock); in do_userquota_cacheflush()
1977 mutex_enter(&os->os_userused_lock); in do_userquota_cacheflush()
1978 VERIFY0(zap_increment(os, DMU_GROUPUSED_OBJECT, in do_userquota_cacheflush()
1980 mutex_exit(&os->os_userused_lock); in do_userquota_cacheflush()
1985 if (dmu_objset_projectquota_enabled(os)) { in do_userquota_cacheflush()
1989 mutex_enter(&os->os_userused_lock); in do_userquota_cacheflush()
1990 VERIFY0(zap_increment(os, DMU_PROJECTUSED_OBJECT, in do_userquota_cacheflush()
1992 mutex_exit(&os->os_userused_lock); in do_userquota_cacheflush()
2021 do_userquota_update(objset_t *os, userquota_cache_t *cache, uint64_t used, in do_userquota_update() argument
2038 if (dmu_objset_projectquota_enabled(os)) { in do_userquota_update()
2048 do_userobjquota_update(objset_t *os, userquota_cache_t *cache, uint64_t flags, in do_userobjquota_update() argument
2063 if (dmu_objset_projectquota_enabled(os)) { in do_userobjquota_update()
2082 objset_t *os = uua->uua_os; in userquota_updates_task() local
2088 &os->os_synced_dnodes, uua->uua_sublist_idx); in userquota_updates_task()
2091 dmu_objset_userused_enabled(os)); in userquota_updates_task()
2096 if (dmu_objset_projectquota_enabled(os)) in userquota_updates_task()
2111 do_userquota_update(os, &cache, dn->dn_oldused, in userquota_updates_task()
2114 do_userobjquota_update(os, &cache, dn->dn_oldflags, in userquota_updates_task()
2119 do_userquota_update(os, &cache, in userquota_updates_task()
2123 do_userobjquota_update(os, &cache, in userquota_updates_task()
2145 dnode_rele(dn, &os->os_synced_dnodes); in userquota_updates_task()
2147 do_userquota_cacheflush(os, &cache, tx); in userquota_updates_task()
2168 objset_t *os = uua->uua_os; in dnode_rele_task() local
2171 &os->os_synced_dnodes, uua->uua_sublist_idx); in dnode_rele_task()
2176 dnode_rele(dn, &os->os_synced_dnodes); in dnode_rele_task()
2186 dmu_objset_do_userquota_updates_prep(objset_t *os, dmu_tx_t *tx) in dmu_objset_do_userquota_updates_prep() argument
2188 if (!dmu_objset_userused_enabled(os)) in dmu_objset_do_userquota_updates_prep()
2198 if (os->os_encrypted && dmu_objset_is_receiving(os)) in dmu_objset_do_userquota_updates_prep()
2201 if (tx->tx_txg <= os->os_spa->spa_claim_max_txg) in dmu_objset_do_userquota_updates_prep()
2205 if (DMU_USERUSED_DNODE(os)->dn_type == DMU_OT_NONE) { in dmu_objset_do_userquota_updates_prep()
2206 VERIFY0(zap_create_claim(os, in dmu_objset_do_userquota_updates_prep()
2209 VERIFY0(zap_create_claim(os, in dmu_objset_do_userquota_updates_prep()
2214 if (dmu_objset_projectquota_enabled(os) && in dmu_objset_do_userquota_updates_prep()
2215 DMU_PROJECTUSED_DNODE(os)->dn_type == DMU_OT_NONE) { in dmu_objset_do_userquota_updates_prep()
2216 VERIFY0(zap_create_claim(os, DMU_PROJECTUSED_OBJECT, in dmu_objset_do_userquota_updates_prep()
2228 dmu_objset_sync_done(objset_t *os, dmu_tx_t *tx) in dmu_objset_sync_done() argument
2230 boolean_t need_userquota = dmu_objset_do_userquota_updates_prep(os, tx); in dmu_objset_sync_done()
2232 int num_sublists = multilist_get_num_sublists(&os->os_synced_dnodes); in dmu_objset_sync_done()
2236 uua->uua_os = os; in dmu_objset_sync_done()
2244 (void) taskq_dispatch(dmu_objset_pool(os)->dp_sync_taskq, in dmu_objset_sync_done()
2286 objset_t *os = dn->dn_objset; in dmu_objset_userquota_get_ids() local
2305 if (os->os_encrypted && dmu_objset_is_receiving(os)) in dmu_objset_userquota_get_ids()
2347 error = file_cbs[os->os_phys->os_type](dn->dn_bonustype, data, &zfi); in dmu_objset_userquota_get_ids()
2400 dmu_objset_userspace_present(objset_t *os) in dmu_objset_userspace_present() argument
2402 return (os->os_phys->os_flags & in dmu_objset_userspace_present()
2407 dmu_objset_userobjspace_present(objset_t *os) in dmu_objset_userobjspace_present() argument
2409 return (os->os_phys->os_flags & in dmu_objset_userobjspace_present()
2414 dmu_objset_projectquota_present(objset_t *os) in dmu_objset_projectquota_present() argument
2416 return (os->os_phys->os_flags & in dmu_objset_projectquota_present()
2421 dmu_objset_space_upgrade(objset_t *os) in dmu_objset_space_upgrade() argument
2434 for (obj = 0; err == 0; err = dmu_object_next(os, &obj, FALSE, 0)) { in dmu_objset_space_upgrade()
2439 mutex_enter(&os->os_upgrade_lock); in dmu_objset_space_upgrade()
2440 if (os->os_upgrade_exit) in dmu_objset_space_upgrade()
2442 mutex_exit(&os->os_upgrade_lock); in dmu_objset_space_upgrade()
2449 objerr = dmu_bonus_hold(os, obj, FTAG, &db); in dmu_objset_space_upgrade()
2452 tx = dmu_tx_create(os); in dmu_objset_space_upgrade()
2468 dmu_objset_userspace_upgrade_cb(objset_t *os) in dmu_objset_userspace_upgrade_cb() argument
2472 if (dmu_objset_userspace_present(os)) in dmu_objset_userspace_upgrade_cb()
2474 if (dmu_objset_is_snapshot(os)) in dmu_objset_userspace_upgrade_cb()
2476 if (!dmu_objset_userused_enabled(os)) in dmu_objset_userspace_upgrade_cb()
2479 err = dmu_objset_space_upgrade(os); in dmu_objset_userspace_upgrade_cb()
2483 os->os_flags |= OBJSET_FLAG_USERACCOUNTING_COMPLETE; in dmu_objset_userspace_upgrade_cb()
2484 txg_wait_synced(dmu_objset_pool(os), 0); in dmu_objset_userspace_upgrade_cb()
2489 dmu_objset_userspace_upgrade(objset_t *os) in dmu_objset_userspace_upgrade() argument
2491 dmu_objset_upgrade(os, dmu_objset_userspace_upgrade_cb); in dmu_objset_userspace_upgrade()
2495 dmu_objset_id_quota_upgrade_cb(objset_t *os) in dmu_objset_id_quota_upgrade_cb() argument
2499 if (dmu_objset_userobjspace_present(os) && in dmu_objset_id_quota_upgrade_cb()
2500 dmu_objset_projectquota_present(os)) in dmu_objset_id_quota_upgrade_cb()
2502 if (dmu_objset_is_snapshot(os)) in dmu_objset_id_quota_upgrade_cb()
2504 if (!dmu_objset_userused_enabled(os)) in dmu_objset_id_quota_upgrade_cb()
2506 if (!dmu_objset_projectquota_enabled(os) && in dmu_objset_id_quota_upgrade_cb()
2507 dmu_objset_userobjspace_present(os)) in dmu_objset_id_quota_upgrade_cb()
2510 if (dmu_objset_userobjused_enabled(os)) in dmu_objset_id_quota_upgrade_cb()
2511 dmu_objset_ds(os)->ds_feature_activation[ in dmu_objset_id_quota_upgrade_cb()
2513 if (dmu_objset_projectquota_enabled(os)) in dmu_objset_id_quota_upgrade_cb()
2514 dmu_objset_ds(os)->ds_feature_activation[ in dmu_objset_id_quota_upgrade_cb()
2517 err = dmu_objset_space_upgrade(os); in dmu_objset_id_quota_upgrade_cb()
2521 os->os_flags |= OBJSET_FLAG_USERACCOUNTING_COMPLETE; in dmu_objset_id_quota_upgrade_cb()
2522 if (dmu_objset_userobjused_enabled(os)) in dmu_objset_id_quota_upgrade_cb()
2523 os->os_flags |= OBJSET_FLAG_USEROBJACCOUNTING_COMPLETE; in dmu_objset_id_quota_upgrade_cb()
2524 if (dmu_objset_projectquota_enabled(os)) in dmu_objset_id_quota_upgrade_cb()
2525 os->os_flags |= OBJSET_FLAG_PROJECTQUOTA_COMPLETE; in dmu_objset_id_quota_upgrade_cb()
2527 txg_wait_synced(dmu_objset_pool(os), 0); in dmu_objset_id_quota_upgrade_cb()
2532 dmu_objset_id_quota_upgrade(objset_t *os) in dmu_objset_id_quota_upgrade() argument
2534 dmu_objset_upgrade(os, dmu_objset_id_quota_upgrade_cb); in dmu_objset_id_quota_upgrade()
2538 dmu_objset_userobjspace_upgradable(objset_t *os) in dmu_objset_userobjspace_upgradable() argument
2540 return (dmu_objset_type(os) == DMU_OST_ZFS && in dmu_objset_userobjspace_upgradable()
2541 !dmu_objset_is_snapshot(os) && in dmu_objset_userobjspace_upgradable()
2542 dmu_objset_userobjused_enabled(os) && in dmu_objset_userobjspace_upgradable()
2543 !dmu_objset_userobjspace_present(os) && in dmu_objset_userobjspace_upgradable()
2544 spa_writeable(dmu_objset_spa(os))); in dmu_objset_userobjspace_upgradable()
2548 dmu_objset_projectquota_upgradable(objset_t *os) in dmu_objset_projectquota_upgradable() argument
2550 return (dmu_objset_type(os) == DMU_OST_ZFS && in dmu_objset_projectquota_upgradable()
2551 !dmu_objset_is_snapshot(os) && in dmu_objset_projectquota_upgradable()
2552 dmu_objset_projectquota_enabled(os) && in dmu_objset_projectquota_upgradable()
2553 !dmu_objset_projectquota_present(os) && in dmu_objset_projectquota_upgradable()
2554 spa_writeable(dmu_objset_spa(os))); in dmu_objset_projectquota_upgradable()
2558 dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp, in dmu_objset_space() argument
2561 dsl_dataset_space(os->os_dsl_dataset, refdbytesp, availbytesp, in dmu_objset_space()
2566 dmu_objset_fsid_guid(objset_t *os) in dmu_objset_fsid_guid() argument
2568 return (dsl_dataset_fsid_guid(os->os_dsl_dataset)); in dmu_objset_fsid_guid()
2572 dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat) in dmu_objset_fast_stat() argument
2574 stat->dds_type = os->os_phys->os_type; in dmu_objset_fast_stat()
2575 if (os->os_dsl_dataset) in dmu_objset_fast_stat()
2576 dsl_dataset_fast_stat(os->os_dsl_dataset, stat); in dmu_objset_fast_stat()
2580 dmu_objset_stats(objset_t *os, nvlist_t *nv) in dmu_objset_stats() argument
2582 ASSERT(os->os_dsl_dataset || in dmu_objset_stats()
2583 os->os_phys->os_type == DMU_OST_META); in dmu_objset_stats()
2585 if (os->os_dsl_dataset != NULL) in dmu_objset_stats()
2586 dsl_dataset_stats(os->os_dsl_dataset, nv); in dmu_objset_stats()
2589 os->os_phys->os_type); in dmu_objset_stats()
2591 dmu_objset_userspace_present(os)); in dmu_objset_stats()
2595 dmu_objset_is_snapshot(objset_t *os) in dmu_objset_is_snapshot() argument
2597 if (os->os_dsl_dataset != NULL) in dmu_objset_is_snapshot()
2598 return (os->os_dsl_dataset->ds_is_snapshot); in dmu_objset_is_snapshot()
2604 dmu_snapshot_realname(objset_t *os, const char *name, char *real, int maxlen, in dmu_snapshot_realname() argument
2607 dsl_dataset_t *ds = os->os_dsl_dataset; in dmu_snapshot_realname()
2619 dmu_snapshot_list_next(objset_t *os, int namelen, char *name, in dmu_snapshot_list_next() argument
2622 dsl_dataset_t *ds = os->os_dsl_dataset; in dmu_snapshot_list_next()
2626 ASSERT(dsl_pool_config_held(dmu_objset_pool(os))); in dmu_snapshot_list_next()
2662 dmu_snapshot_lookup(objset_t *os, const char *name, uint64_t *value) in dmu_snapshot_lookup() argument
2664 return (dsl_dataset_snap_lookup(os->os_dsl_dataset, name, value)); in dmu_snapshot_lookup()
2668 dmu_dir_list_next(objset_t *os, int namelen, char *name, in dmu_dir_list_next() argument
2671 dsl_dir_t *dd = os->os_dsl_dataset->ds_dir; in dmu_dir_list_next()
2676 if (os->os_dsl_dataset->ds_object != in dmu_dir_list_next()
3081 dmu_objset_incompatible_encryption_version(objset_t *os) in dmu_objset_incompatible_encryption_version() argument
3084 os->os_dsl_dataset->ds_dir)); in dmu_objset_incompatible_encryption_version()
3088 dmu_objset_set_user(objset_t *os, void *user_ptr) in dmu_objset_set_user() argument
3090 ASSERT(MUTEX_HELD(&os->os_user_ptr_lock)); in dmu_objset_set_user()
3091 os->os_user_ptr = user_ptr; in dmu_objset_set_user()
3095 dmu_objset_get_user(objset_t *os) in dmu_objset_get_user() argument
3097 ASSERT(MUTEX_HELD(&os->os_user_ptr_lock)); in dmu_objset_get_user()
3098 return (os->os_user_ptr); in dmu_objset_get_user()
3131 dmu_objset_willuse_space(objset_t *os, int64_t space, dmu_tx_t *tx) in dmu_objset_willuse_space() argument
3133 dsl_dataset_t *ds = os->os_dsl_dataset; in dmu_objset_willuse_space()
3134 int64_t aspace = spa_get_worst_case_asize(os->os_spa, space); in dmu_objset_willuse_space()