summaryrefslogtreecommitdiffstats
path: root/module/zfs/dmu_tx.c
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2012-03-20 16:00:17 -0700
committerBrian Behlendorf <[email protected]>2012-03-23 12:25:17 -0700
commit1c5de20ae2511124613926e4f780572634818218 (patch)
tree66e14fa7c95491068117fa977b7c3fd38dd4c315 /module/zfs/dmu_tx.c
parent99ea23c583b272470a21e0ac7caa1f485f6b1125 (diff)
Add --enable-debug-dmu-tx configure option
Allow rigorous (and expensive) tx validation to be enabled/disabled indepentantly from the standard zfs debugging. When enabled these checks ensure that all txs are constructed properly and that a dbuf is never dirtied without taking the correct tx hold. This checking is particularly helpful when adding new dmu consumers like Lustre. However, for established consumers such as the zpl with no known outstanding tx construction problems this is just overhead. --enable-debug-dmu-tx - Enable/disable validation of each tx as --disable-debug-dmu-tx it is constructed. By default validation is disabled due to performance concerns. Signed-off-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'module/zfs/dmu_tx.c')
-rw-r--r--module/zfs/dmu_tx.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/module/zfs/dmu_tx.c b/module/zfs/dmu_tx.c
index 5f333ab96..50207bdbb 100644
--- a/module/zfs/dmu_tx.c
+++ b/module/zfs/dmu_tx.c
@@ -68,7 +68,7 @@ dmu_tx_create_dd(dsl_dir_t *dd)
offsetof(dmu_tx_hold_t, txh_node));
list_create(&tx->tx_callbacks, sizeof (dmu_tx_callback_t),
offsetof(dmu_tx_callback_t, dcb_node));
-#ifdef ZFS_DEBUG
+#ifdef DEBUG_DMU_TX
refcount_create(&tx->tx_space_written);
refcount_create(&tx->tx_space_freed);
#endif
@@ -141,7 +141,7 @@ dmu_tx_hold_object_impl(dmu_tx_t *tx, objset_t *os, uint64_t object,
txh = kmem_zalloc(sizeof (dmu_tx_hold_t), KM_SLEEP);
txh->txh_tx = tx;
txh->txh_dnode = dn;
-#ifdef ZFS_DEBUG
+#ifdef DEBUG_DMU_TX
txh->txh_type = type;
txh->txh_arg1 = arg1;
txh->txh_arg2 = arg2;
@@ -798,7 +798,7 @@ dmu_tx_holds(dmu_tx_t *tx, uint64_t object)
return (holds);
}
-#ifdef ZFS_DEBUG
+#ifdef DEBUG_DMU_TX
void
dmu_tx_dirty_buf(dmu_tx_t *tx, dmu_buf_impl_t *db)
{
@@ -1004,7 +1004,7 @@ dmu_tx_try_assign(dmu_tx_t *tx, uint64_t txg_how)
/* calculate memory footprint estimate */
memory = towrite + tooverwrite + tohold;
-#ifdef ZFS_DEBUG
+#ifdef DEBUG_DMU_TX
/*
* Add in 'tohold' to account for our dirty holds on this memory
* XXX - the "fudge" factor is to account for skipped blocks that
@@ -1130,7 +1130,7 @@ dmu_tx_wait(dmu_tx_t *tx)
void
dmu_tx_willuse_space(dmu_tx_t *tx, int64_t delta)
{
-#ifdef ZFS_DEBUG
+#ifdef DEBUG_DMU_TX
if (tx->tx_dir == NULL || delta == 0)
return;
@@ -1180,7 +1180,7 @@ dmu_tx_commit(dmu_tx_t *tx)
list_destroy(&tx->tx_callbacks);
list_destroy(&tx->tx_holds);
-#ifdef ZFS_DEBUG
+#ifdef DEBUG_DMU_TX
dprintf("towrite=%llu written=%llu tofree=%llu freed=%llu\n",
tx->tx_space_towrite, refcount_count(&tx->tx_space_written),
tx->tx_space_tofree, refcount_count(&tx->tx_space_freed));
@@ -1216,7 +1216,7 @@ dmu_tx_abort(dmu_tx_t *tx)
list_destroy(&tx->tx_callbacks);
list_destroy(&tx->tx_holds);
-#ifdef ZFS_DEBUG
+#ifdef DEBUG_DMU_TX
refcount_destroy_many(&tx->tx_space_written,
refcount_count(&tx->tx_space_written));
refcount_destroy_many(&tx->tx_space_freed,