Skip to content

Commit

Permalink
OpenZFS 7277 - zdb should be able to print zfs_dbgmsg's
Browse files Browse the repository at this point in the history
Porting notes:
- 'zfs_dbgmsg_print()' reintroduced to userspace.

Authored by: Pavel Zakharov <[email protected]>
Reviewed by: George Wilson <[email protected]>
Reviewed by: Matthew Ahrens <[email protected]>
Reviewed by: Igor Kozhukhov <[email protected]>
Approved by: Dan McDonald <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Giuseppe Di Natale <[email protected]>
Ported-by: George Melikov <[email protected]>

OpenZFS-issue: https://www.illumos.org/issues/7277
OpenZFS-commit: openzfs/openzfs@29bdd2f
Closes #5684
  • Loading branch information
gmelikov authored and behlendorf committed Jan 28, 2017
1 parent a32494d commit fa603f8
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 7 deletions.
26 changes: 22 additions & 4 deletions cmd/zdb/zdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2015 by Delphix. All rights reserved.
* Copyright (c) 2011, 2016 by Delphix. All rights reserved.
* Copyright (c) 2015, Intel Corporation.
*/

Expand Down Expand Up @@ -126,7 +126,7 @@ static void
usage(void)
{
(void) fprintf(stderr,
"Usage: %s [-CumMdibcsDvhLXFPA] [-t txg] [-e [-p path...]] "
"Usage: %s [-CumMdibcsDvhLXFPAG] [-t txg] [-e [-p path...]] "
"[-U config] [-I inflight I/Os] [-x dumpdir] poolname [object...]\n"
" %s [-divPA] [-e -p path...] [-U config] dataset "
"[object...]\n"
Expand Down Expand Up @@ -187,12 +187,23 @@ usage(void)
(void) fprintf(stderr, " -I <number of inflight I/Os> -- "
"specify the maximum number of "
"checksumming I/Os [default is 200]\n");
(void) fprintf(stderr, " -G dump zfs_dbgmsg buffer before "
"exiting\n");
(void) fprintf(stderr, "Specify an option more than once (e.g. -bb) "
"to make only that option verbose\n");
(void) fprintf(stderr, "Default is to dump everything non-verbosely\n");
exit(1);
}

static void
dump_debug_buffer(void)
{
if (dump_opt['G']) {
(void) printf("\n");
zfs_dbgmsg_print("zdb");
}
}

/*
* Called for usage errors that are discovered after a call to spa_open(),
* dmu_bonus_hold(), or pool_match(). abort() is called for other errors.
Expand All @@ -209,6 +220,8 @@ fatal(const char *fmt, ...)
va_end(ap);
(void) fprintf(stderr, "\n");

dump_debug_buffer();

exit(1);
}

Expand Down Expand Up @@ -3197,8 +3210,10 @@ dump_zpool(spa_t *spa)
if (dump_opt['h'])
dump_history(spa);

if (rc != 0)
if (rc != 0) {
dump_debug_buffer();
exit(rc);
}
}

#define ZDB_FLAG_CHECKSUM 0x0001
Expand Down Expand Up @@ -3692,7 +3707,7 @@ main(int argc, char **argv)
spa_config_path = spa_config_path_env;

while ((c = getopt(argc, argv,
"bcdhilmMI:suCDRSAFLXx:evp:t:U:PV")) != -1) {
"bcdhilmMI:suCDRSAFLXx:evp:t:U:PVG")) != -1) {
switch (c) {
case 'b':
case 'c':
Expand All @@ -3708,6 +3723,7 @@ main(int argc, char **argv)
case 'M':
case 'R':
case 'S':
case 'G':
dump_opt[c]++;
dump_all = 0;
break;
Expand Down Expand Up @@ -3939,6 +3955,8 @@ main(int argc, char **argv)
fuid_table_destroy();
sa_loaded = B_FALSE;

dump_debug_buffer();

libzfs_fini(g_zfs);
kernel_fini();

Expand Down
1 change: 1 addition & 0 deletions include/sys/zfs_debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ extern void zfs_dbgmsg_fini(void);

#ifndef _KERNEL
extern int dprintf_find_string(const char *string);
extern void zfs_dbgmsg_print(const char *tag);
#endif

#ifdef __cplusplus
Expand Down
17 changes: 14 additions & 3 deletions man/man8/zdb.8
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@
.\"
.\"
.\" Copyright 2012, Richard Lowe.
.\" Copyright (c) 2012, 2014 by Delphix. All rights reserved.
.\" Copyright (c) 2012, 2016 by Delphix. All rights reserved.
.\"
.TH "ZDB" "8" "February 15, 2012" "" ""
.TH "ZDB" "8" "Feb 4, 2016" "" ""

.SH "NAME"
\fBzdb\fR - Display zpool debugging and consistency information

.SH "SYNOPSIS"
\fBzdb\fR [-CumdibcsDvhLMXFPA] [-e [-p \fIpath\fR...]] [-t \fItxg\fR]
\fBzdb\fR [-CumdibcsDvhLMXFPAG] [-e [-p \fIpath\fR...]] [-t \fItxg\fR]
[-U \fIcache\fR] [-I \fIinflight I/Os\fR] [-x \fIdumpdir\fR]
[\fIpoolname\fR [\fIobject\fR ...]]

Expand Down Expand Up @@ -397,6 +397,17 @@ Attempt to make an unreadable pool readable by trying progressively older
transactions.
.RE

.sp
.ne 2
.na
\fB-G\fR
.ad
.sp .6
.RS 4n
Dump the contents of the zfs_dbgmsg buffer before exiting zdb. zfs_dbgmsg is
a buffer used by ZFS to dump advanced debug information.
.RE

.sp
.ne 2
.na
Expand Down
15 changes: 15 additions & 0 deletions module/zfs/zfs_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,21 @@ __dprintf(const char *file, const char *func, int line, const char *fmt, ...)

kmem_free(buf, size);
}

#else

void
zfs_dbgmsg_print(const char *tag)
{
zfs_dbgmsg_t *zdm;

(void) printf("ZFS_DBGMSG(%s):\n", tag);
mutex_enter(&zfs_dbgmsgs_lock);
for (zdm = list_head(&zfs_dbgmsgs); zdm;
zdm = list_next(&zfs_dbgmsgs, zdm))
(void) printf("%s\n", zdm->zdm_msg);
mutex_exit(&zfs_dbgmsgs_lock);
}
#endif /* _KERNEL */

#ifdef _KERNEL
Expand Down

0 comments on commit fa603f8

Please sign in to comment.