diff options
-rw-r--r-- | sbin/dumpon/dumpon.8 | 18 | ||||
-rw-r--r-- | sys/boot/common/loader.8 | 6 | ||||
-rw-r--r-- | sys/boot/forth/loader.conf | 1 | ||||
-rw-r--r-- | sys/kern/kern_shutdown.c | 11 |
4 files changed, 30 insertions, 6 deletions
diff --git a/sbin/dumpon/dumpon.8 b/sbin/dumpon/dumpon.8 index 99c2cc3..8d57557 100644 --- a/sbin/dumpon/dumpon.8 +++ b/sbin/dumpon/dumpon.8 @@ -93,12 +93,24 @@ or to .Ar special_file is the text string: .Dq Li off . +.Pp +Since +.Nm +can only be called after the system enters single-user mode, +it can not be used to create dumps +for system panics during kernel initialization. In such cases you +have to use +.Va dumpdev +tunable provided by +.Xr loader 8 +instead. .Sh SEE ALSO .Xr sysctl 3 , .Xr fstab 5 , .Xr rc.conf 5 , .Xr config 8 , .Xr init 8 , +.Xr loader 8 , .Xr rc 8 , .Xr savecore 8 , .Xr swapon 8 , @@ -113,12 +125,6 @@ boot-time system configuration .Sh BUGS Because the filesystem layer is already dead by the time a crash dump is taken, it is not possible to send crash dumps directly to a file. -.Pp -Since -.Nm -can only be called after the system enters single-user mode, -it can not be used to create dumps -for system panics during kernel initialization. .Sh HISTORY The .Nm diff --git a/sys/boot/common/loader.8 b/sys/boot/common/loader.8 index 185f391..d7466d5 100644 --- a/sys/boot/common/loader.8 +++ b/sys/boot/common/loader.8 @@ -392,6 +392,12 @@ when the kernel is booted. This can be overridden by setting .Va rootdev explicitly. +.It Va dumpdev +A name of device where the kernel can save a crash dump in the case +of a panic. This automatically sets +.Va kern.dumpdev +.Xr sysctl 3 +MIB variable. .El .Pp Other variables are used to override kernel tunable parameters. diff --git a/sys/boot/forth/loader.conf b/sys/boot/forth/loader.conf index 7256ea6..e04aa4a 100644 --- a/sys/boot/forth/loader.conf +++ b/sys/boot/forth/loader.conf @@ -64,6 +64,7 @@ module_path="/boot/kernel;/boot/modules;/modules" # Set the module search path #boot_verbose="NO" # Causes extra debugging information to be printed #init_path="/sbin/init:/sbin/oinit:/sbin/init.bak:/stand/sysinstall" # Sets the list of init candidates +#dumpdev="ad0s1b" # Set device for crash dumps ############################################################## diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c index 9263af9..d0cfe6e 100644 --- a/sys/kern/kern_shutdown.c +++ b/sys/kern/kern_shutdown.c @@ -54,6 +54,7 @@ #include <sys/eventhandler.h> #include <sys/kernel.h> #include <sys/kthread.h> +#include <sys/malloc.h> #include <sys/mount.h> #include <sys/proc.h> #include <sys/reboot.h> @@ -457,6 +458,16 @@ setdumpdev(dev_t dev) static void dump_conf(void *dummy) { + char *path; + dev_t dev; + + path = malloc(MNAMELEN, M_TEMP, M_WAITOK); + if (TUNABLE_STR_FETCH("dumpdev", path, MNAMELEN) != 0) { + dev = getdiskbyname(path); + if (dev != NODEV) + dumpdev = dev; + } + free(path, M_TEMP); if (setdumpdev(dumpdev) != 0) dumpdev = NODEV; } |