This patch adds "[--format] <string>" to "virsh dump
--memory-only", which is
changed to use the new virDomainCoreDumpWithFormat API. And "--compress" is
added as an alias for "--format kdump-zlib".
Signed-off-by: Qiao Nuohan <qiaonuohan(a)cn.fujitsu.com>
---
tools/virsh-domain.c | 47 ++++++++++++++++++++++++++++++++++++++++++++---
tools/virsh.pod | 6 ++++++
2 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 1d3c5f0..6458752 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -4486,6 +4486,14 @@ static const vshCmdOptDef opts_dump[] = {
.type = VSH_OT_BOOL,
.help = N_("dump domain's memory only")
},
+ {.name = "compress",
+ .type = VSH_OT_ALIAS,
+ .help = "format=kdump-zlib",
+ },
+ {.name = "format",
+ .type = VSH_OT_DATA,
+ .help = N_("specify the format of memory-only dump")
+ },
{.name = NULL}
};
@@ -4501,6 +4509,8 @@ doDump(void *opaque)
const char *name = NULL;
const char *to = NULL;
unsigned int flags = 0;
+ const char *format = NULL;
+ unsigned int dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_RAW;
sigemptyset(&sigmask);
sigaddset(&sigmask, SIGINT);
@@ -4524,9 +4534,40 @@ doDump(void *opaque)
if (vshCommandOptBool(cmd, "memory-only"))
flags |= VIR_DUMP_MEMORY_ONLY;
- if (virDomainCoreDump(dom, to, flags) < 0) {
- vshError(ctl, _("Failed to core dump domain %s to %s"), name, to);
- goto out;
+ if (vshCommandOptBool(cmd, "format")) {
+ if (!(flags & VIR_DUMP_MEMORY_ONLY)) {
+ vshError(ctl, "%s", _("--format only work with
--memory-only"));
+ goto out;
+ }
+
+ if (vshCommandOptString(cmd, "format", &format)) {
+ if (STREQ(format, "kdump-zlib"))
+ dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_ZLIB;
+ else if (STREQ(format, "kdump-lzo"))
+ dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_LZO;
+ else if (STREQ(format, "kdump-snappy"))
+ dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_SNAPPY;
+ else if (STREQ(format, "elf"))
+ dumpformat = VIR_DOMAIN_CORE_DUMP_FORMAT_RAW;
+ else {
+ vshError(ctl, _("format '%s' is not supported, expecting
"
+ "'kdump-zlib', 'kdump-lzo',
'kdump-snappy' "
+ "or 'elf'."), format);
+ goto out;
+ }
+ }
+ }
+
+ if (dumpformat != VIR_DOMAIN_CORE_DUMP_FORMAT_RAW) {
+ if (virDomainCoreDumpWithFormat(dom, to, dumpformat, flags) < 0) {
+ vshError(ctl, _("Failed to core dump domain %s to %s"), name, to);
+ goto out;
+ }
+ } else {
+ if (virDomainCoreDump(dom, to, flags) < 0) {
+ vshError(ctl, _("Failed to core dump domain %s to %s"), name, to);
+ goto out;
+ }
}
ret = '0';
diff --git a/tools/virsh.pod b/tools/virsh.pod
index cafbb9a..3ce8c6a 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -995,6 +995,7 @@ I<format> argument may be B<xen-xm> or B<xen-sxpr>.
=item B<dump> I<domain> I<corefilepath> [I<--bypass-cache>]
{ [I<--live>] | [I<--crash>] | [I<--reset>] } [I<--verbose>]
[I<--memory-only>]
+[I<--format> I<string>]
Dumps the core of a domain to a file for analysis.
If I<--live> is specified, the domain continues to run until the core
@@ -1008,6 +1009,11 @@ cache, although this may slow down the operation.
If I<--memory-only> is specified, the file is elf file, and will only
include domain's memory and cpu common register value. It is very
useful if the domain uses host devices directly.
+I<--format> I<string> is used to specify the format of 'memory-only'
+dump, and I<string> can be one of them: elf, kdump-zlib(kdump-compressed
+format with zlib-compressed), kdump-lzo(kdump-compressed format with
+lzo-compressed), kdump-snappy(kdump-compressed format with snappy-compressed)
+I<--compress> is an alias for I<--format> I<kdump-zlib>.
The progress may be monitored using B<domjobinfo> virsh command and canceled
with B<domjobabort> command (sent by another virsh instance). Another option
--
1.8.5.3