From 87d98efe9ea7dd1e464f38fc5e39f0d08191d3be Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 11 Oct 2012 13:56:32 -0700 Subject: [PATCH] Fix zfs_txg_timeout module parameter 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 --- include/sys/txg.h | 3 +++ module/zfs/dsl_scan.c | 5 ----- module/zfs/txg.c | 7 ++++++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/sys/txg.h b/include/sys/txg.h index 2636938..2f87d74 100644 --- a/include/sys/txg.h +++ b/include/sys/txg.h @@ -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 diff --git a/module/zfs/dsl_scan.c b/module/zfs/dsl_scan.c index 453431d..c2386dd 100644 --- a/module/zfs/dsl_scan.c +++ b/module/zfs/dsl_scan.c @@ -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 diff --git a/module/zfs/txg.c b/module/zfs/txg.c index e14bff2..5702a61 100644 --- a/module/zfs/txg.c +++ b/module/zfs/txg.c @@ -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 -- 1.8.3.1