Fix using zvol as slog device
[zfs.git] / include / sys / dsl_pool.h
index 7d25bd7..40e9610 100644 (file)
@@ -65,6 +65,13 @@ typedef struct zfs_all_blkstats {
        zfs_blkstat_t   zab_type[DN_MAX_LEVELS + 1][DMU_OT_TOTAL + 1];
 } zfs_all_blkstats_t;
 
+typedef struct txg_history {
+       kstat_txg_t     th_kstat;
+       vdev_stat_t     th_vs1;
+       vdev_stat_t     th_vs2;
+       kmutex_t        th_lock;
+       list_node_t     th_link;
+} txg_history_t;
 
 typedef struct dsl_pool {
        /* Immutable */
@@ -75,7 +82,8 @@ typedef struct dsl_pool {
        struct dsl_dir *dp_free_dir;
        struct dsl_dataset *dp_origin_snap;
        uint64_t dp_root_dir_obj;
-       struct taskq *dp_vnrele_taskq;
+       struct taskq *dp_iput_taskq;
+       kstat_t *dp_txg_kstat;
 
        /* No lock needed - sync context only */
        blkptr_t dp_meta_rootbp;
@@ -92,6 +100,9 @@ typedef struct dsl_pool {
        kmutex_t dp_lock;
        uint64_t dp_space_towrite[TXG_SIZE];
        uint64_t dp_tempreserved[TXG_SIZE];
+       uint64_t dp_txg_history_size;
+       list_t dp_txg_history;
+
 
        /* Has its own locking */
        tx_state_t dp_tx;
@@ -135,7 +146,7 @@ void dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx);
 void dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 void dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 
-taskq_t *dsl_pool_vnrele_taskq(dsl_pool_t *dp);
+taskq_t *dsl_pool_iput_taskq(dsl_pool_t *dp);
 
 extern int dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj,
     const char *tag, uint64_t *now, dmu_tx_t *tx);
@@ -144,6 +155,10 @@ extern int dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj,
 extern void dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp);
 int dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **);
 
+txg_history_t *dsl_pool_txg_history_add(dsl_pool_t *dp, uint64_t txg);
+txg_history_t *dsl_pool_txg_history_get(dsl_pool_t *dp, uint64_t txg);
+void dsl_pool_txg_history_put(txg_history_t *th);
+
 #ifdef __cplusplus
 }
 #endif