Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Nov 2012 17:33:52 +0000 (UTC)
From:      Alfred Perlstein <alfred@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r242446 - in user/alfred/9-alfred: share/man/man4 sys/conf sys/ddb
Message-ID:  <201211011733.qA1HXqqR042966@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: alfred
Date: Thu Nov  1 17:33:52 2012
New Revision: 242446
URL: http://svn.freebsd.org/changeset/base/242446

Log:
  re-do: Merge textdump enhancements from head.
  
  svn merge -c 242424,242427,242428,242440 ^/head/share/man/man4
  svn merge -c 242424,242427,242428,242440 ^/head/sys

Modified:
  user/alfred/9-alfred/share/man/man4/ddb.4
  user/alfred/9-alfred/share/man/man4/textdump.4
  user/alfred/9-alfred/sys/conf/NOTES
  user/alfred/9-alfred/sys/conf/options
  user/alfred/9-alfred/sys/ddb/db_command.c
  user/alfred/9-alfred/sys/ddb/db_textdump.c
Directory Properties:
  user/alfred/9-alfred/share/man/man4/   (props changed)
  user/alfred/9-alfred/sys/   (props changed)
  user/alfred/9-alfred/sys/conf/   (props changed)

Modified: user/alfred/9-alfred/share/man/man4/ddb.4
==============================================================================
--- user/alfred/9-alfred/share/man/man4/ddb.4	Thu Nov  1 17:30:33 2012	(r242445)
+++ user/alfred/9-alfred/share/man/man4/ddb.4	Thu Nov  1 17:33:52 2012	(r242446)
@@ -1176,6 +1176,7 @@ section for more information on the scri
 .It Ic textdump set
 .It Ic textdump status
 .It Ic textdump unset
+.It Ic textdump dump
 The
 .Ic textdump set
 command may be used to force the next kernel core dump to be a textdump
@@ -1184,6 +1185,9 @@ rather than a traditional memory dump or
 reports whether a textdump has been scheduled.
 .Ic textdump unset
 cancels a request to perform a textdump as the next kernel core dump.
+Use the 
+.Ic textdump dump
+command to immediately perform a textdump.
 More information may be found in
 .Xr textdump 4 .
 .El

Modified: user/alfred/9-alfred/share/man/man4/textdump.4
==============================================================================
--- user/alfred/9-alfred/share/man/man4/textdump.4	Thu Nov  1 17:30:33 2012	(r242445)
+++ user/alfred/9-alfred/share/man/man4/textdump.4	Thu Nov  1 17:33:52 2012	(r242446)
@@ -36,6 +36,9 @@
 .Sh SYNOPSIS
 .Cd options KDB
 .Cd options DDB
+.Pp
+.Cd options TEXTDUMP_VERBOSE
+.Cd options TEXTDUMP_PREFERRED
 .Sh DESCRIPTION
 The
 .Nm
@@ -115,7 +118,11 @@ or by setting the
 .Dv debug.ddb.textdump.pending
 sysctl to 1 using
 .Xr sysctl 8 ,
-it is possible to request that the next dump be a textdump.
+it is possible to request that the next dump be a textdump.  One can
+also directly trigger a textdump in
+.Xr ddb 4
+by running the command
+.Ic textdump dump .
 .Pp
 If at the
 .Xr ddb 4
@@ -125,10 +132,30 @@ command line, the commands
 and
 .Ic textdump unset
 may be used to set, query, and clear the textdump pending flag.
+The command
+.Ic textdump dump
+can be used to immediately trigger a textdump.
 .Pp
 As with regular kernel dumps, a dump partition must be automatically or
 manually configured using
 .Xr dumpon 8 .
+.Pp
+Additional kernel
+.Xr config 8
+options:
+.Bl -tag -width TEXTDUMP_PREFERRED
+.It Cd TEXTDUMP_PREFERRED
+sets textdumps to be the default manner of doing dumps.  This means there
+will be no need to
+.Xr sysctl 8
+or use the
+.Ic textdump set
+.Xr ddb 8
+commands.
+.It Cd TEXTDUMP_VERBOSE
+will have the textdump facility be more verbose about each file it is emitting
+as well as other diagnostics useful to debug the textdump facility itself.
+.El
 .Sh EXAMPLES
 In the following example, the script
 .Dv kdb.enter.panic

Modified: user/alfred/9-alfred/sys/conf/NOTES
==============================================================================
--- user/alfred/9-alfred/sys/conf/NOTES	Thu Nov  1 17:30:33 2012	(r242445)
+++ user/alfred/9-alfred/sys/conf/NOTES	Thu Nov  1 17:33:52 2012	(r242446)
@@ -389,6 +389,16 @@ options 	GDB
 options 	SYSCTL_DEBUG
 
 #
+# Enable textdump by default, this disables kernel core dumps.
+#
+options		TEXTDUMP_PREFERRED
+
+#
+# Enable extra debug messages while performing textdumps.
+#
+options		TEXTDUMP_VERBOSE
+
+#
 # NO_SYSCTL_DESCR omits the sysctl node descriptions to save space in the
 # resulting kernel.
 options		NO_SYSCTL_DESCR

Modified: user/alfred/9-alfred/sys/conf/options
==============================================================================
--- user/alfred/9-alfred/sys/conf/options	Thu Nov  1 17:30:33 2012	(r242445)
+++ user/alfred/9-alfred/sys/conf/options	Thu Nov  1 17:33:52 2012	(r242446)
@@ -60,6 +60,8 @@ KDB		opt_global.h
 KDB_TRACE	opt_kdb.h
 KDB_UNATTENDED	opt_kdb.h
 SYSCTL_DEBUG	opt_sysctl.h
+TEXTDUMP_PREFERRED	opt_ddb.h
+TEXTDUMP_VERBOSE	opt_ddb.h
 
 # Miscellaneous options.
 ADAPTIVE_LOCKMGRS

Modified: user/alfred/9-alfred/sys/ddb/db_command.c
==============================================================================
--- user/alfred/9-alfred/sys/ddb/db_command.c	Thu Nov  1 17:30:33 2012	(r242445)
+++ user/alfred/9-alfred/sys/ddb/db_command.c	Thu Nov  1 17:33:52 2012	(r242446)
@@ -535,6 +535,11 @@ db_dump(db_expr_t dummy, boolean_t dummy
 {
 	int error;
 
+	if (textdump_pending) {
+		db_printf("textdump_pending set.\n"
+		    "run \"textdump unset\" first or \"textdump dump\" for a textdump.\n");
+		return;
+	}
 	error = doadump(FALSE);
 	if (error) {
 		db_printf("Cannot dump: ");

Modified: user/alfred/9-alfred/sys/ddb/db_textdump.c
==============================================================================
--- user/alfred/9-alfred/sys/ddb/db_textdump.c	Thu Nov  1 17:30:33 2012	(r242445)
+++ user/alfred/9-alfred/sys/ddb/db_textdump.c	Thu Nov  1 17:33:52 2012	(r242446)
@@ -61,6 +61,8 @@ __FBSDID("$FreeBSD$");
 
 #include "opt_config.h"
 
+#include "opt_ddb.h"
+
 #include <sys/param.h>
 #include <sys/conf.h>
 #include <sys/kernel.h>
@@ -118,7 +120,11 @@ CTASSERT(sizeof(struct ustar_header) == 
  * Is a textdump scheduled?  If so, the shutdown code will invoke our dumpsys
  * routine instead of the machine-dependent kernel dump routine.
  */
-int	textdump_pending;
+#ifdef TEXTDUMP_PREFERRED
+int	textdump_pending = 1;
+#else
+int	textdump_pending = 0;
+#endif
 SYSCTL_INT(_debug_ddb_textdump, OID_AUTO, pending, CTLFLAG_RW,
     &textdump_pending, 0,
     "Perform textdump instead of regular kernel dump.");
@@ -201,6 +207,10 @@ textdump_mkustar(char *block_buffer, con
 {
 	struct ustar_header *uhp;
 
+#ifdef TEXTDUMP_VERBOSE
+	if (textdump_error == 0)
+		printf("textdump: creating '%s'.\n", filename);
+#endif
 	uhp = (struct ustar_header *)block_buffer;
 	bzero(uhp, sizeof(*uhp));
 	strlcpy(uhp->uh_filename, filename, sizeof(uhp->uh_filename));
@@ -237,6 +247,9 @@ textdump_writeblock(struct dumperinfo *d
 		return (ENOSPC);
 	textdump_error = dump_write(di, buffer, 0, offset + di->mediaoffset,
 	    TEXTDUMP_BLOCKSIZE);
+	if (textdump_error)
+		printf("textdump_writeblock: offset %jd, error %d\n", (intmax_t)offset,
+		    textdump_error);
 	return (textdump_error);
 }
 
@@ -430,7 +443,7 @@ textdump_dumpsys(struct dumperinfo *di)
 	 * of data.
 	 */
 	if (di->mediasize < SIZEOF_METADATA + 2 * sizeof(kdh)) {
-		printf("Insufficient space on dump partition.\n");
+		printf("Insufficient space on dump partition for minimal textdump.\n");
 		return;
 	}
 	textdump_error = 0;
@@ -480,9 +493,9 @@ textdump_dumpsys(struct dumperinfo *di)
 	if (textdump_error == 0)
 		(void)dump_write(di, NULL, 0, 0, 0);
 	if (textdump_error == ENOSPC)
-		printf("Insufficient space on dump partition\n");
+		printf("Textdump: Insufficient space on dump partition\n");
 	else if (textdump_error != 0)
-		printf("Error %d writing dump\n", textdump_error);
+		printf("Textdump: Error %d writing dump\n", textdump_error);
 	else
 		printf("Textdump complete.\n");
 	textdump_pending = 0;
@@ -499,7 +512,7 @@ static void
 db_textdump_usage(void)
 {
 
-	db_printf("textdump [unset|set|status]\n");
+	db_printf("textdump [unset|set|status|dump]\n");
 }
 
 void
@@ -528,6 +541,10 @@ db_textdump_cmd(db_expr_t addr, boolean_
 	} else if (strcmp(db_tok_string, "unset") == 0) {
 		textdump_pending = 0;
 		db_printf("textdump unset\n");
-	} else
+	} else if (strcmp(db_tok_string, "dump") == 0) {
+		textdump_pending = 1;
+		doadump(TRUE);
+	} else {
 		db_textdump_usage();
+	}
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211011733.qA1HXqqR042966>