Add 'dmu_tx' kstats entry
[zfs.git] / module / zfs / dsl_pool.c
index 7185540..d428b7a 100644 (file)
@@ -44,10 +44,10 @@ int zfs_no_write_throttle = 0;
 int zfs_write_limit_shift = 3;                 /* 1/8th of physical memory */
 int zfs_txg_synctime_ms = 1000;                /* target millisecs to sync a txg */
 
-uint64_t zfs_write_limit_min = 32 << 20;       /* min write limit is 32MB */
-uint64_t zfs_write_limit_max = 0;              /* max data payload per txg */
-uint64_t zfs_write_limit_inflated = 0;
-uint64_t zfs_write_limit_override = 0;
+unsigned long zfs_write_limit_min = 32 << 20;  /* min write limit is 32MB */
+unsigned long zfs_write_limit_max = 0;         /* max data payload per txg */
+unsigned long zfs_write_limit_inflated = 0;
+unsigned long zfs_write_limit_override = 0;
 
 kmutex_t zfs_write_limit_lock;
 
@@ -275,8 +275,8 @@ dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg)
 
        /* create the root objset */
        VERIFY(0 == dsl_dataset_hold_obj(dp, obj, FTAG, &ds));
-       os = dmu_objset_create_impl(dp->dp_spa, ds,
-           dsl_dataset_get_blkptr(ds), DMU_OST_ZFS, tx);
+       VERIFY(NULL != (os = dmu_objset_create_impl(dp->dp_spa, ds,
+           dsl_dataset_get_blkptr(ds), DMU_OST_ZFS, tx)));
 #ifdef _KERNEL
        zfs_create_fs(os, kcred, zplprops, tx);
 #endif
@@ -517,8 +517,10 @@ dsl_pool_tempreserve_space(dsl_pool_t *dp, uint64_t space, dmu_tx_t *tx)
                reserved = dp->dp_space_towrite[tx->tx_txg & TXG_MASK]
                    + dp->dp_tempreserved[tx->tx_txg & TXG_MASK] / 2;
 
-               if (reserved && reserved > write_limit)
+               if (reserved && reserved > write_limit) {
+                       DMU_TX_STAT_BUMP(dmu_tx_write_limit);
                        return (ERESTART);
+               }
        }
 
        atomic_add_64(&dp->dp_tempreserved[tx->tx_txg & TXG_MASK], space);
@@ -847,3 +849,26 @@ dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj, const char *tag,
        return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, NULL,
            tx, B_FALSE));
 }
+
+#if defined(_KERNEL) && defined(HAVE_SPL)
+module_param(zfs_no_write_throttle, int, 0644);
+MODULE_PARM_DESC(zfs_no_write_throttle, "Disable write throttling");
+
+module_param(zfs_write_limit_shift, int, 0444);
+MODULE_PARM_DESC(zfs_write_limit_shift, "log2(fraction of memory) per txg");
+
+module_param(zfs_txg_synctime_ms, int, 0644);
+MODULE_PARM_DESC(zfs_txg_synctime_ms, "Target milliseconds between tgx sync");
+
+module_param(zfs_write_limit_min, ulong, 0444);
+MODULE_PARM_DESC(zfs_write_limit_min, "Min tgx write limit");
+
+module_param(zfs_write_limit_max, ulong, 0444);
+MODULE_PARM_DESC(zfs_write_limit_max, "Max tgx write limit");
+
+module_param(zfs_write_limit_inflated, ulong, 0444);
+MODULE_PARM_DESC(zfs_write_limit_inflated, "Inflated tgx write limit");
+
+module_param(zfs_write_limit_override, ulong, 0444);
+MODULE_PARM_DESC(zfs_write_limit_override, "Override tgx write limit");
+#endif