aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs/zil.c
diff options
context:
space:
mode:
Diffstat (limited to 'module/zfs/zil.c')
-rw-r--r--module/zfs/zil.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/module/zfs/zil.c b/module/zfs/zil.c
index 81bc6de41..73744ffcf 100644
--- a/module/zfs/zil.c
+++ b/module/zfs/zil.c
@@ -1269,22 +1269,13 @@ zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb)
tx = dmu_tx_create(zilog->zl_os);
/*
- * Since we are not going to create any new dirty data and we can even
- * help with clearing the existing dirty data, we should not be subject
- * to the dirty data based delays.
- * We (ab)use TXG_WAITED to bypass the delay mechanism.
- * One side effect from using TXG_WAITED is that dmu_tx_assign() can
- * fail if the pool is suspended. Those are dramatic circumstances,
- * so we return NULL to signal that the normal ZIL processing is not
- * possible and txg_wait_synced() should be used to ensure that the data
- * is on disk.
+ * Since we are not going to create any new dirty data, and we
+ * can even help with clearing the existing dirty data, we
+ * should not be subject to the dirty data based delays. We
+ * use TXG_NOTHROTTLE to bypass the delay mechanism.
*/
- error = dmu_tx_assign(tx, TXG_WAITED);
- if (error != 0) {
- ASSERT(error == EIO || error == ERESTART);
- dmu_tx_abort(tx);
- return (NULL);
- }
+ VERIFY0(dmu_tx_assign(tx, TXG_WAIT | TXG_NOTHROTTLE));
+
dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx);
txg = dmu_tx_get_txg(tx);