summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorJason King <jason.brian.king@gmail.com>2021-11-05 09:48:07 -0500
committerJason King <jason.brian.king@gmail.com>2021-11-19 15:27:15 -0600
commitd8f839f91e21bea2f5200f95df55608cbecdeeb9 (patch)
treee346867b613449eeb87674a39fc76497eb3f3bd9 /usr/src/lib
parent705b6680745618ebbf67feb254ce9a62511084a5 (diff)
downloadillumos-joyent-d8f839f91e21bea2f5200f95df55608cbecdeeb9.tar.gz
14223 Add change key zfs channel program
Portions contributed by: Alex Wilson <alex@cooperi.net> Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com> Reviewed by: Dan McDonald <danmcd@joyent.com> Reviewed by: Mike Zeller <mike.zeller@joyent.com> Reviewed by: Toomas Soome <tsoome@me.com> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib')
-rw-r--r--usr/src/lib/libzfs_core/common/libzfs_core.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/usr/src/lib/libzfs_core/common/libzfs_core.c b/usr/src/lib/libzfs_core/common/libzfs_core.c
index dc505f020c..471a5e5515 100644
--- a/usr/src/lib/libzfs_core/common/libzfs_core.c
+++ b/usr/src/lib/libzfs_core/common/libzfs_core.c
@@ -25,6 +25,7 @@
* Copyright (c) 2014 Integros [integros.com]
* Copyright 2017 RackTop Systems.
* Copyright (c) 2017 Datto Inc.
+ * Copyright 2020 Joyent, Inc.
*/
/*
@@ -1069,6 +1070,7 @@ lzc_channel_program_impl(const char *pool, const char *program, boolean_t sync,
{
int error;
nvlist_t *args;
+ nvlist_t *hidden_args = NULL;
args = fnvlist_alloc();
fnvlist_add_string(args, ZCP_ARG_PROGRAM, program);
@@ -1076,6 +1078,22 @@ lzc_channel_program_impl(const char *pool, const char *program, boolean_t sync,
fnvlist_add_boolean_value(args, ZCP_ARG_SYNC, sync);
fnvlist_add_uint64(args, ZCP_ARG_INSTRLIMIT, instrlimit);
fnvlist_add_uint64(args, ZCP_ARG_MEMLIMIT, memlimit);
+
+ /*
+ * If any hidden arguments are passed, we pull them out of 'args'
+ * and into a separate nvlist so spa_history_nvl() doesn't log
+ * their values.
+ */
+ if (nvlist_lookup_nvlist(argnvl, ZPOOL_HIDDEN_ARGS,
+ &hidden_args) == 0) {
+ nvlist_t *argcopy = fnvlist_dup(argnvl);
+
+ fnvlist_add_nvlist(args, ZPOOL_HIDDEN_ARGS, hidden_args);
+ fnvlist_remove(argcopy, ZPOOL_HIDDEN_ARGS);
+ fnvlist_add_nvlist(args, ZCP_ARG_ARGLIST, argcopy);
+ nvlist_free(argcopy);
+ }
+
error = lzc_ioctl(ZFS_IOC_CHANNEL_PROGRAM, pool, args, outnvl);
fnvlist_free(args);