aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2018-02-13 19:28:02 +0000
committerMark Johnston <markj@FreeBSD.org>2018-02-13 19:28:02 +0000
commit6026dcd7ca888f3433f4df34ede69a77c1eb7701 (patch)
tree0de05c03d3e12526dae1a59da5a95ddedd6c3738 /sys/kern/kern_sig.c
parent83ab0f9f33c1ba96cce50a48e27e40c8c2eead5a (diff)
downloadsrc-6026dcd7ca888f3433f4df34ede69a77c1eb7701.tar.gz
src-6026dcd7ca888f3433f4df34ede69a77c1eb7701.zip
Add support for zstd-compressed user and kernel core dumps.
This works similarly to the existing gzip compression support, but zstd is typically faster and gives better compression ratios. Support for this functionality must be configured by adding ZSTDIO to one's kernel configuration file. dumpon(8)'s new -Z option is used to configure zstd compression for kernel dumps. savecore(8) now recognizes and saves zstd-compressed kernel dumps with a .zst extension. Submitted by: cem (original version) Relnotes: yes Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D13101, https://reviews.freebsd.org/D13633
Notes
Notes: svn path=/head/; revision=329240
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 24c1cbdf1618..a71de7a5848f 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -3253,7 +3253,8 @@ sysctl_debug_num_cores_check (SYSCTL_HANDLER_ARGS)
SYSCTL_PROC(_debug, OID_AUTO, ncores, CTLTYPE_INT|CTLFLAG_RW,
0, sizeof(int), sysctl_debug_num_cores_check, "I", "");
-#define GZ_SUFFIX ".gz"
+#define GZIP_SUFFIX ".gz"
+#define ZSTD_SUFFIX ".zst"
int compress_user_cores = 0;
@@ -3273,7 +3274,9 @@ sysctl_compress_user_cores(SYSCTL_HANDLER_ARGS)
}
SYSCTL_PROC(_kern, OID_AUTO, compress_user_cores, CTLTYPE_INT | CTLFLAG_RWTUN,
0, sizeof(int), sysctl_compress_user_cores, "I",
- "Enable compression of user corefiles (" __XSTRING(COMPRESS_GZIP) " = gzip)");
+ "Enable compression of user corefiles ("
+ __XSTRING(COMPRESS_GZIP) " = gzip, "
+ __XSTRING(COMPRESS_ZSTD) " = zstd)");
int compress_user_cores_level = 6;
SYSCTL_INT(_kern, OID_AUTO, compress_user_cores_level, CTLFLAG_RWTUN,
@@ -3377,7 +3380,9 @@ corefile_open(const char *comm, uid_t uid, pid_t pid, struct thread *td,
sx_sunlock(&corefilename_lock);
free(hostname, M_TEMP);
if (compress == COMPRESS_GZIP)
- sbuf_printf(&sb, GZ_SUFFIX);
+ sbuf_printf(&sb, GZIP_SUFFIX);
+ else if (compress == COMPRESS_ZSTD)
+ sbuf_printf(&sb, ZSTD_SUFFIX);
if (sbuf_error(&sb) != 0) {
log(LOG_ERR, "pid %ld (%s), uid (%lu): corename is too "
"long\n", (long)pid, comm, (u_long)uid);