summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/zfs/dsl_destroy.c
diff options
context:
space:
mode:
authorKeith M Wesolowski <wesolows@foobazco.org>2013-10-08 20:35:11 +0000
committerKeith M Wesolowski <wesolows@foobazco.org>2013-10-08 20:35:23 +0000
commit8dabb8c07d158527e4563c519087b92df1f48969 (patch)
treecdf8b43cad8d99f0d14d5a6d48a17e2199843e18 /usr/src/uts/common/fs/zfs/dsl_destroy.c
parent0c3e53c3a25115a415f4ee6f6d02e7a0a285a676 (diff)
parent2acef22db7808606888f8f92715629ff3ba555b9 (diff)
downloadillumos-joyent-8dabb8c07d158527e4563c519087b92df1f48969.tar.gz
[illumos-gate merge]
commit 2acef22db7808606888f8f92715629ff3ba555b9 4171 clean up spa_feature_*() interfaces 4172 implement extensible_dataset feature for use by other zpool features commit 018d3f06fe63d3b8316ef73502fb8f2dd473ffd1 3195 mpt_sas IOC reset races can cause panics Conflicts: usr/src/common/zfs/zfeature_common.h (preserve FS_SS_LIMIT)
Diffstat (limited to 'usr/src/uts/common/fs/zfs/dsl_destroy.c')
-rw-r--r--usr/src/uts/common/fs/zfs/dsl_destroy.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/usr/src/uts/common/fs/zfs/dsl_destroy.c b/usr/src/uts/common/fs/zfs/dsl_destroy.c
index b002df7561..047fc63e69 100644
--- a/usr/src/uts/common/fs/zfs/dsl_destroy.c
+++ b/usr/src/uts/common/fs/zfs/dsl_destroy.c
@@ -38,6 +38,7 @@
#include <sys/zfeature.h>
#include <sys/zfs_ioctl.h>
#include <sys/dsl_deleg.h>
+#include <sys/dmu_impl.h>
typedef struct dmu_snapshots_destroy_arg {
nvlist_t *dsda_snaps;
@@ -448,7 +449,7 @@ dsl_destroy_snapshot_sync_impl(dsl_dataset_t *ds, boolean_t defer, dmu_tx_t *tx)
VERIFY0(zap_destroy(mos, ds->ds_phys->ds_userrefs_obj, tx));
dsl_dir_rele(ds->ds_dir, ds);
ds->ds_dir = NULL;
- VERIFY0(dmu_object_free(mos, obj, tx));
+ dmu_object_free_zapified(mos, obj, tx);
}
static void
@@ -671,7 +672,7 @@ dsl_dir_destroy_sync(uint64_t ddobj, dmu_tx_t *tx)
dd->dd_parent->dd_phys->dd_child_dir_zapobj, dd->dd_myname, tx));
dsl_dir_rele(dd, FTAG);
- VERIFY0(dmu_object_free(mos, ddobj, tx));
+ dmu_object_free_zapified(mos, ddobj, tx);
}
void
@@ -724,10 +725,6 @@ dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx)
ds->ds_prev->ds_phys->ds_num_children--;
}
- zfeature_info_t *async_destroy =
- &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY];
- objset_t *os;
-
/*
* Destroy the deadlist. Unless it's a clone, the
* deadlist should be empty. (If it's a clone, it's
@@ -738,9 +735,10 @@ dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx)
dmu_buf_will_dirty(ds->ds_dbuf, tx);
ds->ds_phys->ds_deadlist_obj = 0;
+ objset_t *os;
VERIFY0(dmu_objset_from_ds(ds, &os));
- if (!spa_feature_is_enabled(dp->dp_spa, async_destroy)) {
+ if (!spa_feature_is_enabled(dp->dp_spa, SPA_FEATURE_ASYNC_DESTROY)) {
old_synchronous_dataset_destroy(ds, tx);
} else {
/*
@@ -751,10 +749,11 @@ dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx)
zil_destroy_sync(dmu_objset_zil(os), tx);
- if (!spa_feature_is_active(dp->dp_spa, async_destroy)) {
+ if (!spa_feature_is_active(dp->dp_spa,
+ SPA_FEATURE_ASYNC_DESTROY)) {
dsl_scan_t *scn = dp->dp_scan;
-
- spa_feature_incr(dp->dp_spa, async_destroy, tx);
+ spa_feature_incr(dp->dp_spa, SPA_FEATURE_ASYNC_DESTROY,
+ tx);
dp->dp_bptree_obj = bptree_alloc(mos, tx);
VERIFY0(zap_add(mos,
DMU_POOL_DIRECTORY_OBJECT,
@@ -814,7 +813,7 @@ dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx)
ASSERT0(ds->ds_phys->ds_userrefs_obj);
dsl_dir_rele(ds->ds_dir, ds);
ds->ds_dir = NULL;
- VERIFY0(dmu_object_free(mos, obj, tx));
+ dmu_object_free_zapified(mos, obj, tx);
dsl_dir_destroy_sync(ddobj, tx);
@@ -870,8 +869,7 @@ dsl_destroy_head(const char *name)
error = spa_open(name, &spa, FTAG);
if (error != 0)
return (error);
- isenabled = spa_feature_is_enabled(spa,
- &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY]);
+ isenabled = spa_feature_is_enabled(spa, SPA_FEATURE_ASYNC_DESTROY);
spa_close(spa, FTAG);
ddha.ddha_name = name;