aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/zdb/zdb.c
diff options
context:
space:
mode:
authorSerapheim Dimitropoulos <[email protected]>2018-10-30 09:46:18 -0700
committerBrian Behlendorf <[email protected]>2018-10-30 11:46:18 -0500
commit0a544c174d54d9adcea2faf5817596174582139e (patch)
treee6dae62fe20d54d8313ce699784c83c33f2281e9 /cmd/zdb/zdb.c
parent63a77ae3cff2eea8f7d92c5ab2ab99af664b34a5 (diff)
zdb -k does not work on Linux when used with -e
This minor bug was introduced with the port of the feature from OpenZFS to ZoL. This patch fixes the issue that was caused by a minor re-ordering from the original code. Reviewed-by: Matthew Ahrens <[email protected]> Reviewed-by: George Melikov <[email protected]> Reviewed-by: Tim Chase <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Serapheim Dimitropoulos <[email protected]> Closes #8001
Diffstat (limited to 'cmd/zdb/zdb.c')
-rw-r--r--cmd/zdb/zdb.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c
index cdea1e584..737217538 100644
--- a/cmd/zdb/zdb.c
+++ b/cmd/zdb/zdb.c
@@ -6057,17 +6057,6 @@ main(int argc, char **argv)
error = 0;
target = argv[0];
- char *checkpoint_pool = NULL;
- char *checkpoint_target = NULL;
- if (dump_opt['k']) {
- checkpoint_pool = import_checkpointed_state(target, cfg,
- &checkpoint_target);
-
- if (checkpoint_target != NULL)
- target = checkpoint_target;
-
- }
-
if (strpbrk(target, "/@") != NULL) {
size_t targetlen;
@@ -6113,6 +6102,24 @@ main(int argc, char **argv)
}
}
+ /*
+ * import_checkpointed_state makes the assumption that the
+ * target pool that we pass it is already part of the spa
+ * namespace. Because of that we need to make sure to call
+ * it always after the -e option has been processed, which
+ * imports the pool to the namespace if it's not in the
+ * cachefile.
+ */
+ char *checkpoint_pool = NULL;
+ char *checkpoint_target = NULL;
+ if (dump_opt['k']) {
+ checkpoint_pool = import_checkpointed_state(target, cfg,
+ &checkpoint_target);
+
+ if (checkpoint_target != NULL)
+ target = checkpoint_target;
+ }
+
if (target_pool != target)
free(target_pool);