summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Chase <tim@chase2k.com>2016-07-19 16:24:06 -0700
committerMatthew Ahrens <mahrens@delphix.com>2016-07-19 20:57:30 -0700
commitb702644a6eb66615d67b492fd73ecd9efa11fc7d (patch)
tree957c7099561f4315a0648c91351a993a82b34587
parentc39a2aae1e2c439d156021edfc20910dad7f9891 (diff)
downloadillumos-joyent-b702644a6eb66615d67b492fd73ecd9efa11fc7d.tar.gz
7164 zdb should be able to open the root dataset
Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Robert Mustacchi <rm@joyent.com>
-rw-r--r--usr/src/cmd/zdb/zdb.c18
-rw-r--r--usr/src/man/man1m/zdb.1m5
2 files changed, 22 insertions, 1 deletions
diff --git a/usr/src/cmd/zdb/zdb.c b/usr/src/cmd/zdb/zdb.c
index deef7b4084..751610c6fb 100644
--- a/usr/src/cmd/zdb/zdb.c
+++ b/usr/src/cmd/zdb/zdb.c
@@ -3533,6 +3533,7 @@ main(int argc, char **argv)
uint64_t max_txg = UINT64_MAX;
int rewind = ZPOOL_NEVER_REWIND;
char *spa_config_path_env;
+ boolean_t target_is_spa = B_TRUE;
(void) setrlimit(RLIMIT_NOFILE, &rl);
(void) enable_extended_FILE_stdio(-1, -1);
@@ -3711,8 +3712,23 @@ main(int argc, char **argv)
}
}
+ if (strpbrk(target, "/@") != NULL) {
+ size_t targetlen;
+
+ target_is_spa = B_FALSE;
+ /*
+ * Remove any trailing slash. Later code would get confused
+ * by it, but we want to allow it so that "pool/" can
+ * indicate that we want to dump the topmost filesystem,
+ * rather than the whole pool.
+ */
+ targetlen = strlen(target);
+ if (targetlen != 0 && target[targetlen - 1] == '/')
+ target[targetlen - 1] = '\0';
+ }
+
if (error == 0) {
- if (strpbrk(target, "/@") == NULL || dump_opt['R']) {
+ if (target_is_spa || dump_opt['R']) {
error = spa_open_rewind(target, &spa, FTAG, policy,
NULL);
if (error) {
diff --git a/usr/src/man/man1m/zdb.1m b/usr/src/man/man1m/zdb.1m
index 7ec98908f6..0b5b01df76 100644
--- a/usr/src/man/man1m/zdb.1m
+++ b/usr/src/man/man1m/zdb.1m
@@ -56,6 +56,11 @@ pool, and is inherently unstable. The precise output of most invocations is
not documented, a knowledge of ZFS internals is assumed.
.P
+If the \fIdataset\fR argument does not contain any \fB/\fR or \fB@\fR
+characters, it is interpreted as a pool name. The root dataset can be
+specified as \fIpool\fB/\fR (pool name followed by a slash).
+
+.P
When operating on an imported and active pool it is possible, though unlikely,
that zdb may interpret inconsistent pool data and behave erratically.