]> granicus.if.org Git - zfs/commitdiff
Fix most zfs_arc_* mod params not actually being modifiable at runtime
authorJustin Gottula <justin@jgottula.com>
Tue, 12 Mar 2019 22:03:59 +0000 (15:03 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 12 Mar 2019 22:03:59 +0000 (15:03 -0700)
Most of the zfs_arc_* module parameters do not have their values used by
the ARC code directly. Instead, there is a function, arc_tuning_update,
which is called during module initialization and periodically
thereafter, whose job is to fetch the module parameter values, clamp/
limit them appropriately, and then assign those values to a separate set
of internal variables that are actually referenced by the ARC code.

Commit 3ec34e55 featured an overhaul of arc_reclaim_thread, which is the
former location where the post-init-time calls to arc_tuning_update
would occur. The rework split the work previously done by the
arc_reclaim_thread into a pair of replacement threads; and
unfortunately, the call to arc_tuning_update fell through the cracks and
was lost in the reorganization.

This meant that changing almost any ARC-related zfs module parameter via
/sys/module/zfs/parameters/ would result in the module parameter value
itself appearing to change; however the modification would not actually
propagate to the ARC code and have any real effect.

This commit reinstates the post-init-time call to arc_tuning_update. It
is now called during arc_adjust_cb_check; this should be equivalent to
its former call location in arc_reclaim_thread.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Justin Gottula <justin@jgottula.com>
Closes #8405
Closes #8463

module/zfs/arc.c

index 9072b6582bd67beab524f86bf224eaa91980f733..637333ed26ffaff6ed11d31760db5d61c7c86396 100644 (file)
@@ -5076,6 +5076,14 @@ arc_kmem_reap_soon(void)
 static boolean_t
 arc_adjust_cb_check(void *arg, zthr_t *zthr)
 {
+       /*
+        * This is necessary so that any changes which may have been made to
+        * many of the zfs_arc_* module parameters will be propagated to
+        * their actual internal variable counterparts. Without this,
+        * changing those module params at runtime would have no effect.
+        */
+       arc_tuning_update();
+
        /*
         * This is necessary in order to keep the kstat information
         * up to date for tools that display kstat data such as the