libzpool: tunable-based option interface for zdb/ztest

Removes the old dlsym() based option setter and adds a new
function handle_tunable_option() that can set, get and list all the
tunables in the system. And then wire it up to zdb and ztest.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Rob Norris <robn@despairlabs.com>
Closes #17537
This commit is contained in:
Rob Norris
2025-07-12 11:33:19 +10:00
committed by Brian Behlendorf
parent cb9742e532
commit fce18e04d5
7 changed files with 133 additions and 102 deletions
+12 -4
View File
@@ -797,8 +797,8 @@ usage(void)
"[default is 200]\n");
(void) fprintf(stderr, " -K --key=KEY "
"decryption key for encrypted dataset\n");
(void) fprintf(stderr, " -o --option=\"OPTION=INTEGER\" "
"set global variable to an unsigned 32-bit integer\n");
(void) fprintf(stderr, " -o --option=\"NAME=VALUE\" "
"set the named tunable to the given value\n");
(void) fprintf(stderr, " -p --path==PATH "
"use one or more with -e to specify path to vdev dir\n");
(void) fprintf(stderr, " -P --parseable "
@@ -9377,9 +9377,11 @@ main(int argc, char **argv)
while (*optarg != '\0') { *optarg++ = '*'; }
break;
case 'o':
error = set_global_var(optarg);
dump_opt[c]++;
dump_all = 0;
error = handle_tunable_option(optarg, B_FALSE);
if (error != 0)
usage();
zdb_exit(1);
break;
case 'p':
if (searchdirs == NULL) {
@@ -9545,6 +9547,12 @@ main(int argc, char **argv)
error = 0;
goto fini;
}
if (dump_opt['o'])
/*
* Avoid blasting tunable options off the top of the
* screen.
*/
zdb_exit(1);
usage();
}