Fix zfs_txg_timeout module parameter
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 11 Oct 2012 20:56:32 +0000 (13:56 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 11 Oct 2012 22:07:09 +0000 (15:07 -0700)
Allow the zfs_txg_timeout variable to be dynamically tuned at run
time.  By pulling it down out of the variable declaration it will
be evaluted each time through the loop.

The zfs_txg_timeout variable is now declared extern in a the common
sys/txg.h header rather than locally in dsl_scan.c.  This prevents
potential type mismatches if the global variable needs to be used
elsewhere.

Move the module_param() code in to the same source file where
zfs_txg_timeout is declared.  This is the most logical location.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
include/sys/txg.h
module/zfs/dsl_scan.c
module/zfs/txg.c

index 2636938..2f87d74 100644 (file)
@@ -130,6 +130,9 @@ extern int txg_list_member(txg_list_t *tl, void *p, uint64_t txg);
 extern void *txg_list_head(txg_list_t *tl, uint64_t txg);
 extern void *txg_list_next(txg_list_t *tl, void *p, uint64_t txg);
 
+/* Global tuning */
+extern int zfs_txg_timeout;
+
 #ifdef __cplusplus
 }
 #endif
index 453431d..c2386dd 100644 (file)
@@ -71,8 +71,6 @@ int dsl_scan_delay_completion = B_FALSE; /* set to delay scan completion */
        ((scn)->scn_phys.scn_func == POOL_SCAN_SCRUB || \
        (scn)->scn_phys.scn_func == POOL_SCAN_RESILVER)
 
-extern int zfs_txg_timeout;
-
 /* the order has to match pool_scan_type */
 static scan_cb_t *scan_funcs[POOL_SCAN_FUNCS] = {
        NULL,
@@ -1813,7 +1811,4 @@ MODULE_PARM_DESC(zfs_no_scrub_io, "Set to disable scrub I/O");
 
 module_param(zfs_no_scrub_prefetch, int, 0644);
 MODULE_PARM_DESC(zfs_no_scrub_prefetch, "Set to disable scrub prefetching");
-
-module_param(zfs_txg_timeout, int, 0644);
-MODULE_PARM_DESC(zfs_txg_timeout, "Max seconds worth of delta per txg");
 #endif
index e14bff2..5702a61 100644 (file)
@@ -395,9 +395,11 @@ txg_sync_thread(dsl_pool_t *dp)
 
        start = delta = 0;
        for (;;) {
-               uint64_t timer, timeout = zfs_txg_timeout * hz;
+               uint64_t timer, timeout;
                uint64_t txg;
 
+               timeout = zfs_txg_timeout * hz;
+
                /*
                 * We sync when we're scanning, there's someone waiting
                 * on us, or the quiesce thread has handed off a txg to
@@ -773,4 +775,7 @@ EXPORT_SYMBOL(txg_wait_open);
 EXPORT_SYMBOL(txg_wait_callbacks);
 EXPORT_SYMBOL(txg_stalled);
 EXPORT_SYMBOL(txg_sync_waiting);
+
+module_param(zfs_txg_timeout, int, 0644);
+MODULE_PARM_DESC(zfs_txg_timeout, "Max seconds worth of delta per txg");
 #endif