Lines Matching refs:dd
127 extern inline dsl_dir_phys_t *dsl_dir_phys(dsl_dir_t *dd);
129 static uint64_t dsl_dir_space_towrite(dsl_dir_t *dd);
139 dsl_dir_t *dd = dbu; in dsl_dir_evict_async() local
140 dsl_pool_t *dp = dd->dd_pool; in dsl_dir_evict_async()
143 dd->dd_dbuf = NULL; in dsl_dir_evict_async()
146 ASSERT(!txg_list_member(&dp->dp_dirty_dirs, dd, t)); in dsl_dir_evict_async()
147 ASSERT(dd->dd_tempreserved[t] == 0); in dsl_dir_evict_async()
148 ASSERT(dd->dd_space_towrite[t] == 0); in dsl_dir_evict_async()
151 if (dd->dd_parent) in dsl_dir_evict_async()
152 dsl_dir_async_rele(dd->dd_parent, dd); in dsl_dir_evict_async()
154 spa_async_close(dd->dd_pool->dp_spa, dd); in dsl_dir_evict_async()
156 dsl_prop_fini(dd); in dsl_dir_evict_async()
157 mutex_destroy(&dd->dd_lock); in dsl_dir_evict_async()
158 kmem_free(dd, sizeof (dsl_dir_t)); in dsl_dir_evict_async()
166 dsl_dir_t *dd; in dsl_dir_hold_obj() local
175 dd = dmu_buf_get_user(dbuf); in dsl_dir_hold_obj()
181 if (dd == NULL) { in dsl_dir_hold_obj()
184 dd = kmem_zalloc(sizeof (dsl_dir_t), KM_SLEEP); in dsl_dir_hold_obj()
185 dd->dd_object = ddobj; in dsl_dir_hold_obj()
186 dd->dd_dbuf = dbuf; in dsl_dir_hold_obj()
187 dd->dd_pool = dp; in dsl_dir_hold_obj()
189 if (dsl_dir_is_zapified(dd) && in dsl_dir_hold_obj()
194 sizeof (uint64_t), 1, &dd->dd_crypto_obj)); in dsl_dir_hold_obj()
197 if (dsl_dir_incompatible_encryption_version(dd)) { in dsl_dir_hold_obj()
203 mutex_init(&dd->dd_lock, NULL, MUTEX_DEFAULT, NULL); in dsl_dir_hold_obj()
204 dsl_prop_init(dd); in dsl_dir_hold_obj()
206 dsl_dir_snap_cmtime_update(dd); in dsl_dir_hold_obj()
208 if (dsl_dir_phys(dd)->dd_parent_obj) { in dsl_dir_hold_obj()
210 dsl_dir_phys(dd)->dd_parent_obj, NULL, dd, in dsl_dir_hold_obj()
211 &dd->dd_parent); in dsl_dir_hold_obj()
219 dsl_dir_phys(dd->dd_parent)-> in dsl_dir_hold_obj()
224 (void) strcpy(dd->dd_myname, tail); in dsl_dir_hold_obj()
227 dsl_dir_phys(dd->dd_parent)-> in dsl_dir_hold_obj()
229 ddobj, 0, dd->dd_myname); in dsl_dir_hold_obj()
234 (void) strcpy(dd->dd_myname, spa_name(dp->dp_spa)); in dsl_dir_hold_obj()
237 if (dsl_dir_is_clone(dd)) { in dsl_dir_hold_obj()
247 dsl_dir_phys(dd)->dd_origin_obj, FTAG, in dsl_dir_hold_obj()
252 dd->dd_origin_txg = in dsl_dir_hold_obj()
257 dmu_buf_init_user(&dd->dd_dbu, NULL, dsl_dir_evict_async, in dsl_dir_hold_obj()
258 &dd->dd_dbuf); in dsl_dir_hold_obj()
259 winner = dmu_buf_set_user_ie(dbuf, &dd->dd_dbu); in dsl_dir_hold_obj()
261 if (dd->dd_parent) in dsl_dir_hold_obj()
262 dsl_dir_rele(dd->dd_parent, dd); in dsl_dir_hold_obj()
263 dsl_prop_fini(dd); in dsl_dir_hold_obj()
264 mutex_destroy(&dd->dd_lock); in dsl_dir_hold_obj()
265 kmem_free(dd, sizeof (dsl_dir_t)); in dsl_dir_hold_obj()
266 dd = winner; in dsl_dir_hold_obj()
268 spa_open_ref(dp->dp_spa, dd); in dsl_dir_hold_obj()
282 ASSERT3P(dd->dd_pool, ==, dp); in dsl_dir_hold_obj()
283 ASSERT3U(dd->dd_object, ==, ddobj); in dsl_dir_hold_obj()
284 ASSERT3P(dd->dd_dbuf, ==, dbuf); in dsl_dir_hold_obj()
285 *ddp = dd; in dsl_dir_hold_obj()
289 if (dd->dd_parent) in dsl_dir_hold_obj()
290 dsl_dir_rele(dd->dd_parent, dd); in dsl_dir_hold_obj()
291 dsl_prop_fini(dd); in dsl_dir_hold_obj()
292 mutex_destroy(&dd->dd_lock); in dsl_dir_hold_obj()
293 kmem_free(dd, sizeof (dsl_dir_t)); in dsl_dir_hold_obj()
299 dsl_dir_rele(dsl_dir_t *dd, void *tag) in dsl_dir_rele() argument
301 dprintf_dd(dd, "%s\n", ""); in dsl_dir_rele()
302 spa_close(dd->dd_pool->dp_spa, tag); in dsl_dir_rele()
303 dmu_buf_rele(dd->dd_dbuf, tag); in dsl_dir_rele()
314 dsl_dir_async_rele(dsl_dir_t *dd, void *tag) in dsl_dir_async_rele() argument
316 dprintf_dd(dd, "%s\n", ""); in dsl_dir_async_rele()
317 spa_async_close(dd->dd_pool->dp_spa, tag); in dsl_dir_async_rele()
318 dmu_buf_rele(dd->dd_dbuf, tag); in dsl_dir_async_rele()
323 dsl_dir_name(dsl_dir_t *dd, char *buf) in dsl_dir_name() argument
325 if (dd->dd_parent) { in dsl_dir_name()
326 dsl_dir_name(dd->dd_parent, buf); in dsl_dir_name()
332 if (!MUTEX_HELD(&dd->dd_lock)) { in dsl_dir_name()
337 mutex_enter(&dd->dd_lock); in dsl_dir_name()
338 VERIFY3U(strlcat(buf, dd->dd_myname, ZFS_MAX_DATASET_NAME_LEN), in dsl_dir_name()
340 mutex_exit(&dd->dd_lock); in dsl_dir_name()
342 VERIFY3U(strlcat(buf, dd->dd_myname, ZFS_MAX_DATASET_NAME_LEN), in dsl_dir_name()
349 dsl_dir_namelen(dsl_dir_t *dd) in dsl_dir_namelen() argument
353 if (dd->dd_parent) { in dsl_dir_namelen()
355 result = dsl_dir_namelen(dd->dd_parent) + 1; in dsl_dir_namelen()
358 if (!MUTEX_HELD(&dd->dd_lock)) { in dsl_dir_namelen()
360 mutex_enter(&dd->dd_lock); in dsl_dir_namelen()
361 result += strlen(dd->dd_myname); in dsl_dir_namelen()
362 mutex_exit(&dd->dd_lock); in dsl_dir_namelen()
364 result += strlen(dd->dd_myname); in dsl_dir_namelen()
434 dsl_dir_t *dd; in dsl_dir_hold() local
448 err = dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, NULL, tag, &dd); in dsl_dir_hold()
462 buf, dsl_dir_phys(dd)->dd_child_dir_zapobj); in dsl_dir_hold()
465 dsl_dir_phys(dd)->dd_child_dir_zapobj, in dsl_dir_hold()
476 dsl_dir_rele(dd, tag); in dsl_dir_hold()
477 dd = child_dd; in dsl_dir_hold()
482 dsl_dir_rele(dd, tag); in dsl_dir_hold()
493 dsl_dir_rele(dd, tag); in dsl_dir_hold()
500 *ddp = dd; in dsl_dir_hold()
520 dsl_dir_init_fs_ss_count(dsl_dir_t *dd, dmu_tx_t *tx) in dsl_dir_init_fs_ss_count() argument
524 dsl_pool_t *dp = dd->dd_pool; in dsl_dir_init_fs_ss_count()
534 dsl_dir_zapify(dd, tx); in dsl_dir_init_fs_ss_count()
540 if (zap_contains(os, dd->dd_object, DD_FIELD_FILESYSTEM_COUNT) == 0) in dsl_dir_init_fs_ss_count()
547 for (zap_cursor_init(zc, os, dsl_dir_phys(dd)->dd_child_dir_zapobj); in dsl_dir_init_fs_ss_count()
580 VERIFY0(dsl_dataset_hold_obj(dd->dd_pool, in dsl_dir_init_fs_ss_count()
581 dsl_dir_phys(dd)->dd_head_dataset_obj, FTAG, &ds)); in dsl_dir_init_fs_ss_count()
598 dmu_buf_will_dirty(dd->dd_dbuf, tx); in dsl_dir_init_fs_ss_count()
599 VERIFY0(zap_add(os, dd->dd_object, DD_FIELD_FILESYSTEM_COUNT, in dsl_dir_init_fs_ss_count()
601 VERIFY0(zap_add(os, dd->dd_object, DD_FIELD_SNAPSHOT_COUNT, in dsl_dir_init_fs_ss_count()
611 dsl_dir_t *dd; in dsl_dir_actv_fs_ss_limit_check() local
623 dd = ds->ds_dir; in dsl_dir_actv_fs_ss_limit_check()
625 dsl_dir_is_zapified(dd) && in dsl_dir_actv_fs_ss_limit_check()
626 zap_contains(dp->dp_meta_objset, dd->dd_object, in dsl_dir_actv_fs_ss_limit_check()
714 dsl_enforce_ds_ss_limits(dsl_dir_t *dd, zfs_prop_t prop, cred_t *cr) in dsl_enforce_ds_ss_limits() argument
732 if ((obj = dsl_dir_phys(dd)->dd_head_dataset_obj) == 0) in dsl_enforce_ds_ss_limits()
735 ASSERT(dsl_pool_config_held(dd->dd_pool)); in dsl_enforce_ds_ss_limits()
737 if (dsl_dataset_hold_obj(dd->dd_pool, obj, FTAG, &ds) != 0) in dsl_enforce_ds_ss_limits()
757 dsl_dir_t *dd = arg->ddulrta_dd; in dsl_dir_update_last_remap_txg_sync() local
758 objset_t *mos = dd->dd_pool->dp_meta_objset; in dsl_dir_update_last_remap_txg_sync()
760 dsl_dir_zapify(dd, tx); in dsl_dir_update_last_remap_txg_sync()
761 if (zap_lookup(mos, dd->dd_object, DD_FIELD_LAST_REMAP_TXG, in dsl_dir_update_last_remap_txg_sync()
764 VERIFY0(zap_update(mos, dd->dd_object, DD_FIELD_LAST_REMAP_TXG, in dsl_dir_update_last_remap_txg_sync()
770 dsl_dir_update_last_remap_txg(dsl_dir_t *dd, uint64_t txg) in dsl_dir_update_last_remap_txg() argument
773 arg.ddulrta_dd = dd; in dsl_dir_update_last_remap_txg()
776 return (dsl_sync_task(spa_name(dd->dd_pool->dp_spa), in dsl_dir_update_last_remap_txg()
790 dsl_fs_ss_limit_check(dsl_dir_t *dd, uint64_t delta, zfs_prop_t prop, in dsl_fs_ss_limit_check() argument
793 objset_t *os = dd->dd_pool->dp_meta_objset; in dsl_fs_ss_limit_check()
799 ASSERT(dsl_pool_config_held(dd->dd_pool)); in dsl_fs_ss_limit_check()
811 enforce = dsl_enforce_ds_ss_limits(dd, prop, cr); in dsl_fs_ss_limit_check()
840 if (ancestor == dd) in dsl_fs_ss_limit_check()
848 if (!dsl_dir_is_zapified(dd) || zap_lookup(os, dd->dd_object, in dsl_fs_ss_limit_check()
852 err = dsl_prop_get_dd(dd, zfs_prop_to_name(prop), 8, 1, &limit, NULL, in dsl_fs_ss_limit_check()
861 if (dd->dd_parent != NULL) in dsl_fs_ss_limit_check()
862 err = dsl_fs_ss_limit_check(dd->dd_parent, delta, prop, in dsl_fs_ss_limit_check()
875 dsl_fs_ss_count_adjust(dsl_dir_t *dd, int64_t delta, const char *prop, in dsl_fs_ss_count_adjust() argument
879 objset_t *os = dd->dd_pool->dp_meta_objset; in dsl_fs_ss_count_adjust()
882 ASSERT(dsl_pool_config_held(dd->dd_pool)); in dsl_fs_ss_count_adjust()
893 if ((dd->dd_myname[0] == '%' || dd->dd_myname[0] == '$') && in dsl_fs_ss_count_adjust()
910 if (!dsl_dir_is_zapified(dd) || (err = zap_lookup(os, dd->dd_object, in dsl_fs_ss_count_adjust()
919 VERIFY0(zap_update(os, dd->dd_object, prop, sizeof (count), 1, &count, in dsl_fs_ss_count_adjust()
923 if (dd->dd_parent != NULL) in dsl_fs_ss_count_adjust()
924 dsl_fs_ss_count_adjust(dd->dd_parent, delta, prop, tx); in dsl_fs_ss_count_adjust()
970 dsl_dir_is_clone(dsl_dir_t *dd) in dsl_dir_is_clone() argument
972 return (dsl_dir_phys(dd)->dd_origin_obj && in dsl_dir_is_clone()
973 (dd->dd_pool->dp_origin_snap == NULL || in dsl_dir_is_clone()
974 dsl_dir_phys(dd)->dd_origin_obj != in dsl_dir_is_clone()
975 dd->dd_pool->dp_origin_snap->ds_object)); in dsl_dir_is_clone()
980 dsl_dir_get_used(dsl_dir_t *dd) in dsl_dir_get_used() argument
982 return (dsl_dir_phys(dd)->dd_used_bytes); in dsl_dir_get_used()
986 dsl_dir_get_compressed(dsl_dir_t *dd) in dsl_dir_get_compressed() argument
988 return (dsl_dir_phys(dd)->dd_compressed_bytes); in dsl_dir_get_compressed()
992 dsl_dir_get_quota(dsl_dir_t *dd) in dsl_dir_get_quota() argument
994 return (dsl_dir_phys(dd)->dd_quota); in dsl_dir_get_quota()
998 dsl_dir_get_reservation(dsl_dir_t *dd) in dsl_dir_get_reservation() argument
1000 return (dsl_dir_phys(dd)->dd_reserved); in dsl_dir_get_reservation()
1004 dsl_dir_get_compressratio(dsl_dir_t *dd) in dsl_dir_get_compressratio() argument
1007 return (dsl_dir_phys(dd)->dd_compressed_bytes == 0 ? 100 : in dsl_dir_get_compressratio()
1008 (dsl_dir_phys(dd)->dd_uncompressed_bytes * 100 / in dsl_dir_get_compressratio()
1009 dsl_dir_phys(dd)->dd_compressed_bytes)); in dsl_dir_get_compressratio()
1013 dsl_dir_get_logicalused(dsl_dir_t *dd) in dsl_dir_get_logicalused() argument
1015 return (dsl_dir_phys(dd)->dd_uncompressed_bytes); in dsl_dir_get_logicalused()
1019 dsl_dir_get_usedsnap(dsl_dir_t *dd) in dsl_dir_get_usedsnap() argument
1021 return (dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_SNAP]); in dsl_dir_get_usedsnap()
1025 dsl_dir_get_usedds(dsl_dir_t *dd) in dsl_dir_get_usedds() argument
1027 return (dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_HEAD]); in dsl_dir_get_usedds()
1031 dsl_dir_get_usedrefreserv(dsl_dir_t *dd) in dsl_dir_get_usedrefreserv() argument
1033 return (dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_REFRSRV]); in dsl_dir_get_usedrefreserv()
1037 dsl_dir_get_usedchild(dsl_dir_t *dd) in dsl_dir_get_usedchild() argument
1039 return (dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_CHILD] + in dsl_dir_get_usedchild()
1040 dsl_dir_phys(dd)->dd_used_breakdown[DD_USED_CHILD_RSRV]); in dsl_dir_get_usedchild()
1044 dsl_dir_get_origin(dsl_dir_t *dd, char *buf) in dsl_dir_get_origin() argument
1047 VERIFY0(dsl_dataset_hold_obj(dd->dd_pool, in dsl_dir_get_origin()
1048 dsl_dir_phys(dd)->dd_origin_obj, FTAG, &ds)); in dsl_dir_get_origin()
1056 dsl_dir_get_filesystem_count(dsl_dir_t *dd, uint64_t *count) in dsl_dir_get_filesystem_count() argument
1058 if (dsl_dir_is_zapified(dd)) { in dsl_dir_get_filesystem_count()
1059 objset_t *os = dd->dd_pool->dp_meta_objset; in dsl_dir_get_filesystem_count()
1060 return (zap_lookup(os, dd->dd_object, DD_FIELD_FILESYSTEM_COUNT, in dsl_dir_get_filesystem_count()
1068 dsl_dir_get_snapshot_count(dsl_dir_t *dd, uint64_t *count) in dsl_dir_get_snapshot_count() argument
1070 if (dsl_dir_is_zapified(dd)) { in dsl_dir_get_snapshot_count()
1071 objset_t *os = dd->dd_pool->dp_meta_objset; in dsl_dir_get_snapshot_count()
1072 return (zap_lookup(os, dd->dd_object, DD_FIELD_SNAPSHOT_COUNT, in dsl_dir_get_snapshot_count()
1080 dsl_dir_get_remaptxg(dsl_dir_t *dd, uint64_t *count) in dsl_dir_get_remaptxg() argument
1082 if (dsl_dir_is_zapified(dd)) { in dsl_dir_get_remaptxg()
1083 objset_t *os = dd->dd_pool->dp_meta_objset; in dsl_dir_get_remaptxg()
1084 return (zap_lookup(os, dd->dd_object, DD_FIELD_LAST_REMAP_TXG, in dsl_dir_get_remaptxg()
1092 dsl_dir_stats(dsl_dir_t *dd, nvlist_t *nv) in dsl_dir_stats() argument
1094 mutex_enter(&dd->dd_lock); in dsl_dir_stats()
1096 dsl_dir_get_quota(dd)); in dsl_dir_stats()
1098 dsl_dir_get_reservation(dd)); in dsl_dir_stats()
1100 dsl_dir_get_logicalused(dd)); in dsl_dir_stats()
1101 if (dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN) { in dsl_dir_stats()
1103 dsl_dir_get_usedsnap(dd)); in dsl_dir_stats()
1105 dsl_dir_get_usedds(dd)); in dsl_dir_stats()
1107 dsl_dir_get_usedrefreserv(dd)); in dsl_dir_stats()
1109 dsl_dir_get_usedchild(dd)); in dsl_dir_stats()
1111 mutex_exit(&dd->dd_lock); in dsl_dir_stats()
1114 if (dsl_dir_get_filesystem_count(dd, &count) == 0) { in dsl_dir_stats()
1118 if (dsl_dir_get_snapshot_count(dd, &count) == 0) { in dsl_dir_stats()
1122 if (dsl_dir_get_remaptxg(dd, &count) == 0) { in dsl_dir_stats()
1127 if (dsl_dir_is_clone(dd)) { in dsl_dir_stats()
1129 dsl_dir_get_origin(dd, buf); in dsl_dir_stats()
1136 dsl_dir_dirty(dsl_dir_t *dd, dmu_tx_t *tx) in dsl_dir_dirty() argument
1138 dsl_pool_t *dp = dd->dd_pool; in dsl_dir_dirty()
1140 ASSERT(dsl_dir_phys(dd)); in dsl_dir_dirty()
1142 if (txg_list_add(&dp->dp_dirty_dirs, dd, tx->tx_txg)) { in dsl_dir_dirty()
1144 dmu_buf_add_ref(dd->dd_dbuf, dd); in dsl_dir_dirty()
1149 parent_delta(dsl_dir_t *dd, uint64_t used, int64_t delta) in parent_delta() argument
1151 uint64_t old_accounted = MAX(used, dsl_dir_phys(dd)->dd_reserved); in parent_delta()
1153 MAX(used + delta, dsl_dir_phys(dd)->dd_reserved); in parent_delta()
1158 dsl_dir_sync(dsl_dir_t *dd, dmu_tx_t *tx) in dsl_dir_sync() argument
1162 mutex_enter(&dd->dd_lock); in dsl_dir_sync()
1163 ASSERT0(dd->dd_tempreserved[tx->tx_txg&TXG_MASK]); in dsl_dir_sync()
1164 dprintf_dd(dd, "txg=%llu towrite=%lluK\n", tx->tx_txg, in dsl_dir_sync()
1165 dd->dd_space_towrite[tx->tx_txg&TXG_MASK] / 1024); in dsl_dir_sync()
1166 dd->dd_space_towrite[tx->tx_txg&TXG_MASK] = 0; in dsl_dir_sync()
1167 mutex_exit(&dd->dd_lock); in dsl_dir_sync()
1170 dmu_buf_rele(dd->dd_dbuf, dd); in dsl_dir_sync()
1174 dsl_dir_space_towrite(dsl_dir_t *dd) in dsl_dir_space_towrite() argument
1178 ASSERT(MUTEX_HELD(&dd->dd_lock)); in dsl_dir_space_towrite()
1181 space += dd->dd_space_towrite[i & TXG_MASK]; in dsl_dir_space_towrite()
1182 ASSERT3U(dd->dd_space_towrite[i & TXG_MASK], >=, 0); in dsl_dir_space_towrite()
1193 dsl_dir_space_available(dsl_dir_t *dd, in dsl_dir_space_available() argument
1205 if (dd->dd_parent != NULL) { in dsl_dir_space_available()
1206 parentspace = dsl_dir_space_available(dd->dd_parent, in dsl_dir_space_available()
1210 mutex_enter(&dd->dd_lock); in dsl_dir_space_available()
1211 if (dsl_dir_phys(dd)->dd_quota != 0) in dsl_dir_space_available()
1212 quota = dsl_dir_phys(dd)->dd_quota; in dsl_dir_space_available()
1213 used = dsl_dir_phys(dd)->dd_used_bytes; in dsl_dir_space_available()
1215 used += dsl_dir_space_towrite(dd); in dsl_dir_space_available()
1217 if (dd->dd_parent == NULL) { in dsl_dir_space_available()
1218 uint64_t poolsize = dsl_pool_adjustedsize(dd->dd_pool, in dsl_dir_space_available()
1223 if (dsl_dir_phys(dd)->dd_reserved > used && parentspace != UINT64_MAX) { in dsl_dir_space_available()
1228 parentspace += dsl_dir_phys(dd)->dd_reserved - used; in dsl_dir_space_available()
1231 if (dd == ancestor) { in dsl_dir_space_available()
1250 mutex_exit(&dd->dd_lock); in dsl_dir_space_available()
1262 dsl_dir_tempreserve_impl(dsl_dir_t *dd, uint64_t asize, boolean_t netfree, in dsl_dir_tempreserve_impl() argument
1275 mutex_enter(&dd->dd_lock); in dsl_dir_tempreserve_impl()
1281 uint64_t est_inflight = dsl_dir_space_towrite(dd); in dsl_dir_tempreserve_impl()
1283 est_inflight += dd->dd_tempreserved[i]; in dsl_dir_tempreserve_impl()
1284 uint64_t used_on_disk = dsl_dir_phys(dd)->dd_used_bytes; in dsl_dir_tempreserve_impl()
1298 mutex_exit(&dd->dd_lock); in dsl_dir_tempreserve_impl()
1307 if (ignorequota || netfree || dsl_dir_phys(dd)->dd_quota == 0) in dsl_dir_tempreserve_impl()
1310 quota = dsl_dir_phys(dd)->dd_quota; in dsl_dir_tempreserve_impl()
1323 if (dd->dd_parent == NULL) { in dsl_dir_tempreserve_impl()
1324 uint64_t avail = dsl_pool_unreserved_space(dd->dd_pool, in dsl_dir_tempreserve_impl()
1344 dprintf_dd(dd, "failing: used=%lluK inflight = %lluK " in dsl_dir_tempreserve_impl()
1348 mutex_exit(&dd->dd_lock); in dsl_dir_tempreserve_impl()
1353 dd->dd_tempreserved[txg & TXG_MASK] += asize; in dsl_dir_tempreserve_impl()
1355 uint64_t parent_rsrv = parent_delta(dd, used_on_disk + est_inflight, in dsl_dir_tempreserve_impl()
1357 mutex_exit(&dd->dd_lock); in dsl_dir_tempreserve_impl()
1360 tr->tr_ds = dd; in dsl_dir_tempreserve_impl()
1365 if (dd->dd_parent != NULL && parent_rsrv != 0) { in dsl_dir_tempreserve_impl()
1366 boolean_t ismos = (dsl_dir_phys(dd)->dd_head_dataset_obj == 0); in dsl_dir_tempreserve_impl()
1368 return (dsl_dir_tempreserve_impl(dd->dd_parent, in dsl_dir_tempreserve_impl()
1382 dsl_dir_tempreserve_space(dsl_dir_t *dd, uint64_t lsize, uint64_t asize, in dsl_dir_tempreserve_space() argument
1398 err = arc_tempreserve_space(dd->dd_pool->dp_spa, lsize, tx->tx_txg); in dsl_dir_tempreserve_space()
1416 txg_delay(dd->dd_pool, tx->tx_txg, in dsl_dir_tempreserve_space()
1423 err = dsl_dir_tempreserve_impl(dd, asize, netfree, in dsl_dir_tempreserve_space()
1475 dsl_dir_willuse_space(dsl_dir_t *dd, int64_t space, dmu_tx_t *tx) in dsl_dir_willuse_space() argument
1480 mutex_enter(&dd->dd_lock); in dsl_dir_willuse_space()
1482 dd->dd_space_towrite[tx->tx_txg & TXG_MASK] += space; in dsl_dir_willuse_space()
1484 est_used = dsl_dir_space_towrite(dd) + dsl_dir_phys(dd)->dd_used_bytes; in dsl_dir_willuse_space()
1485 parent_space = parent_delta(dd, est_used, space); in dsl_dir_willuse_space()
1486 mutex_exit(&dd->dd_lock); in dsl_dir_willuse_space()
1489 dsl_dir_dirty(dd, tx); in dsl_dir_willuse_space()
1492 if (parent_space && dd->dd_parent) in dsl_dir_willuse_space()
1493 dsl_dir_willuse_space(dd->dd_parent, parent_space, tx); in dsl_dir_willuse_space()
1498 dsl_dir_diduse_space(dsl_dir_t *dd, dd_used_t type, in dsl_dir_diduse_space() argument
1510 boolean_t needlock = !MUTEX_HELD(&dd->dd_lock); in dsl_dir_diduse_space()
1515 dmu_buf_will_dirty(dd->dd_dbuf, tx); in dsl_dir_diduse_space()
1518 mutex_enter(&dd->dd_lock); in dsl_dir_diduse_space()
1520 parent_delta(dd, dsl_dir_phys(dd)->dd_used_bytes, used); in dsl_dir_diduse_space()
1521 ASSERT(used >= 0 || dsl_dir_phys(dd)->dd_used_bytes >= -used); in dsl_dir_diduse_space()
1523 dsl_dir_phys(dd)->dd_compressed_bytes >= -compressed); in dsl_dir_diduse_space()
1525 dsl_dir_phys(dd)->dd_uncompressed_bytes >= -uncompressed); in dsl_dir_diduse_space()
1526 dsl_dir_phys(dd)->dd_used_bytes += used; in dsl_dir_diduse_space()
1527 dsl_dir_phys(dd)->dd_uncompressed_bytes += uncompressed; in dsl_dir_diduse_space()
1528 dsl_dir_phys(dd)->dd_compressed_bytes += compressed; in dsl_dir_diduse_space()
1530 if (dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN) { in dsl_dir_diduse_space()
1532 dsl_dir_phys(dd)->dd_used_breakdown[type] >= -used); in dsl_dir_diduse_space()
1533 dsl_dir_phys(dd)->dd_used_breakdown[type] += used; in dsl_dir_diduse_space()
1538 u += dsl_dir_phys(dd)->dd_used_breakdown[t]; in dsl_dir_diduse_space()
1539 ASSERT3U(u, ==, dsl_dir_phys(dd)->dd_used_bytes); in dsl_dir_diduse_space()
1543 mutex_exit(&dd->dd_lock); in dsl_dir_diduse_space()
1545 if (dd->dd_parent != NULL) { in dsl_dir_diduse_space()
1546 dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD, in dsl_dir_diduse_space()
1548 dsl_dir_transfer_space(dd->dd_parent, in dsl_dir_diduse_space()
1555 dsl_dir_transfer_space(dsl_dir_t *dd, int64_t delta, in dsl_dir_transfer_space() argument
1563 !(dsl_dir_phys(dd)->dd_flags & DD_FLAG_USED_BREAKDOWN)) in dsl_dir_transfer_space()
1566 dmu_buf_will_dirty(dd->dd_dbuf, tx); in dsl_dir_transfer_space()
1567 mutex_enter(&dd->dd_lock); in dsl_dir_transfer_space()
1569 dsl_dir_phys(dd)->dd_used_breakdown[oldtype] >= delta : in dsl_dir_transfer_space()
1570 dsl_dir_phys(dd)->dd_used_breakdown[newtype] >= -delta); in dsl_dir_transfer_space()
1571 ASSERT(dsl_dir_phys(dd)->dd_used_bytes >= ABS(delta)); in dsl_dir_transfer_space()
1572 dsl_dir_phys(dd)->dd_used_breakdown[oldtype] -= delta; in dsl_dir_transfer_space()
1573 dsl_dir_phys(dd)->dd_used_breakdown[newtype] += delta; in dsl_dir_transfer_space()
1574 mutex_exit(&dd->dd_lock); in dsl_dir_transfer_space()
1676 dsl_dir_t *dd; in dsl_dir_set_reservation_check() local
1683 dd = ds->ds_dir; in dsl_dir_set_reservation_check()
1702 mutex_enter(&dd->dd_lock); in dsl_dir_set_reservation_check()
1703 used = dsl_dir_phys(dd)->dd_used_bytes; in dsl_dir_set_reservation_check()
1704 mutex_exit(&dd->dd_lock); in dsl_dir_set_reservation_check()
1706 if (dd->dd_parent) { in dsl_dir_set_reservation_check()
1707 avail = dsl_dir_space_available(dd->dd_parent, in dsl_dir_set_reservation_check()
1710 avail = dsl_pool_adjustedsize(dd->dd_pool, in dsl_dir_set_reservation_check()
1714 if (MAX(used, newval) > MAX(used, dsl_dir_phys(dd)->dd_reserved)) { in dsl_dir_set_reservation_check()
1716 MAX(used, dsl_dir_phys(dd)->dd_reserved); in dsl_dir_set_reservation_check()
1719 (dsl_dir_phys(dd)->dd_quota > 0 && in dsl_dir_set_reservation_check()
1720 newval > dsl_dir_phys(dd)->dd_quota)) in dsl_dir_set_reservation_check()
1729 dsl_dir_set_reservation_sync_impl(dsl_dir_t *dd, uint64_t value, dmu_tx_t *tx) in dsl_dir_set_reservation_sync_impl() argument
1734 dmu_buf_will_dirty(dd->dd_dbuf, tx); in dsl_dir_set_reservation_sync_impl()
1736 mutex_enter(&dd->dd_lock); in dsl_dir_set_reservation_sync_impl()
1737 used = dsl_dir_phys(dd)->dd_used_bytes; in dsl_dir_set_reservation_sync_impl()
1738 delta = MAX(used, value) - MAX(used, dsl_dir_phys(dd)->dd_reserved); in dsl_dir_set_reservation_sync_impl()
1739 dsl_dir_phys(dd)->dd_reserved = value; in dsl_dir_set_reservation_sync_impl()
1741 if (dd->dd_parent != NULL) { in dsl_dir_set_reservation_sync_impl()
1743 dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD_RSRV, in dsl_dir_set_reservation_sync_impl()
1746 mutex_exit(&dd->dd_lock); in dsl_dir_set_reservation_sync_impl()
1798 dsl_dir_t *dd; in closest_common_ancestor() local
1799 for (dd = ds2; dd; dd = dd->dd_parent) { in closest_common_ancestor()
1800 if (ds1 == dd) in closest_common_ancestor()
1801 return (dd); in closest_common_ancestor()
1812 would_change(dsl_dir_t *dd, int64_t delta, dsl_dir_t *ancestor) in would_change() argument
1814 if (dd == ancestor) in would_change()
1817 mutex_enter(&dd->dd_lock); in would_change()
1818 delta = parent_delta(dd, dsl_dir_phys(dd)->dd_used_bytes, delta); in would_change()
1819 mutex_exit(&dd->dd_lock); in would_change()
1820 return (would_change(dd->dd_parent, delta, ancestor)); in would_change()
1860 dsl_dir_t *dd, *newparent; in dsl_dir_rename_check() local
1866 error = dsl_dir_hold(dp, ddra->ddra_oldname, FTAG, &dd, NULL); in dsl_dir_rename_check()
1874 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1879 if (dd->dd_pool != newparent->dd_pool) { in dsl_dir_rename_check()
1881 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1888 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1903 error = dmu_objset_find_dp(dp, dd->dd_object, dsl_valid_rename, in dsl_dir_rename_check()
1907 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1923 dsl_dir_init_fs_ss_count(dd, tx); in dsl_dir_rename_check()
1927 if (newparent != dd->dd_parent) { in dsl_dir_rename_check()
1930 MAX(dsl_dir_phys(dd)->dd_used_bytes, in dsl_dir_rename_check()
1931 dsl_dir_phys(dd)->dd_reserved); in dsl_dir_rename_check()
1932 objset_t *os = dd->dd_pool->dp_meta_objset; in dsl_dir_rename_check()
1936 if (dsl_dir_is_zapified(dd)) { in dsl_dir_rename_check()
1939 err = zap_lookup(os, dd->dd_object, in dsl_dir_rename_check()
1944 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1954 err = zap_lookup(os, dd->dd_object, in dsl_dir_rename_check()
1959 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1965 error = dsl_dir_rename_crypt_check(dd, newparent); in dsl_dir_rename_check()
1968 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1973 if (closest_common_ancestor(dd, newparent) == dd) { in dsl_dir_rename_check()
1975 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1979 error = dsl_dir_transfer_possible(dd->dd_parent, in dsl_dir_rename_check()
1983 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1989 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_check()
1998 dsl_dir_t *dd, *newparent; in dsl_dir_rename_sync() local
2003 VERIFY0(dsl_dir_hold(dp, ddra->ddra_oldname, FTAG, &dd, NULL)); in dsl_dir_rename_sync()
2008 spa_history_log_internal_dd(dd, "rename", tx, in dsl_dir_rename_sync()
2011 if (newparent != dd->dd_parent) { in dsl_dir_rename_sync()
2012 objset_t *os = dd->dd_pool->dp_meta_objset; in dsl_dir_rename_sync()
2022 VERIFY0(zap_lookup(os, dd->dd_object, in dsl_dir_rename_sync()
2028 VERIFY0(zap_lookup(os, dd->dd_object, in dsl_dir_rename_sync()
2033 dsl_fs_ss_count_adjust(dd->dd_parent, -fs_cnt, in dsl_dir_rename_sync()
2038 dsl_fs_ss_count_adjust(dd->dd_parent, -ss_cnt, in dsl_dir_rename_sync()
2043 dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD, in dsl_dir_rename_sync()
2044 -dsl_dir_phys(dd)->dd_used_bytes, in dsl_dir_rename_sync()
2045 -dsl_dir_phys(dd)->dd_compressed_bytes, in dsl_dir_rename_sync()
2046 -dsl_dir_phys(dd)->dd_uncompressed_bytes, tx); in dsl_dir_rename_sync()
2048 dsl_dir_phys(dd)->dd_used_bytes, in dsl_dir_rename_sync()
2049 dsl_dir_phys(dd)->dd_compressed_bytes, in dsl_dir_rename_sync()
2050 dsl_dir_phys(dd)->dd_uncompressed_bytes, tx); in dsl_dir_rename_sync()
2052 if (dsl_dir_phys(dd)->dd_reserved > in dsl_dir_rename_sync()
2053 dsl_dir_phys(dd)->dd_used_bytes) { in dsl_dir_rename_sync()
2054 uint64_t unused_rsrv = dsl_dir_phys(dd)->dd_reserved - in dsl_dir_rename_sync()
2055 dsl_dir_phys(dd)->dd_used_bytes; in dsl_dir_rename_sync()
2057 dsl_dir_diduse_space(dd->dd_parent, DD_USED_CHILD_RSRV, in dsl_dir_rename_sync()
2064 dmu_buf_will_dirty(dd->dd_dbuf, tx); in dsl_dir_rename_sync()
2068 dsl_dir_phys(dd->dd_parent)->dd_child_dir_zapobj, in dsl_dir_rename_sync()
2069 dd->dd_myname, tx); in dsl_dir_rename_sync()
2072 (void) strlcpy(dd->dd_myname, mynewname, in dsl_dir_rename_sync()
2073 sizeof (dd->dd_myname)); in dsl_dir_rename_sync()
2074 dsl_dir_rele(dd->dd_parent, dd); in dsl_dir_rename_sync()
2075 dsl_dir_phys(dd)->dd_parent_obj = newparent->dd_object; in dsl_dir_rename_sync()
2077 newparent->dd_object, NULL, dd, &dd->dd_parent)); in dsl_dir_rename_sync()
2081 dd->dd_myname, 8, 1, &dd->dd_object, tx)); in dsl_dir_rename_sync()
2083 dsl_prop_notify_all(dd); in dsl_dir_rename_sync()
2086 dsl_dir_rele(dd, FTAG); in dsl_dir_rename_sync()
2131 dsl_dir_snap_cmtime(dsl_dir_t *dd) in dsl_dir_snap_cmtime() argument
2135 mutex_enter(&dd->dd_lock); in dsl_dir_snap_cmtime()
2136 t = dd->dd_snap_cmtime; in dsl_dir_snap_cmtime()
2137 mutex_exit(&dd->dd_lock); in dsl_dir_snap_cmtime()
2143 dsl_dir_snap_cmtime_update(dsl_dir_t *dd) in dsl_dir_snap_cmtime_update() argument
2148 mutex_enter(&dd->dd_lock); in dsl_dir_snap_cmtime_update()
2149 dd->dd_snap_cmtime = t; in dsl_dir_snap_cmtime_update()
2150 mutex_exit(&dd->dd_lock); in dsl_dir_snap_cmtime_update()
2154 dsl_dir_zapify(dsl_dir_t *dd, dmu_tx_t *tx) in dsl_dir_zapify() argument
2156 objset_t *mos = dd->dd_pool->dp_meta_objset; in dsl_dir_zapify()
2157 dmu_object_zapify(mos, dd->dd_object, DMU_OT_DSL_DIR, tx); in dsl_dir_zapify()
2161 dsl_dir_is_zapified(dsl_dir_t *dd) in dsl_dir_is_zapified() argument
2165 dmu_object_info_from_db(dd->dd_dbuf, &doi); in dsl_dir_is_zapified()