Backport from upstream.
commit 3422e1d6bc3511c5af9cb05ba74ad97dd93ffd7f Author: Julien Thierry jthierry@redhat.com Date: Tue Nov 24 10:45:24 2020 +0000
[PATCH 1/2] Add --dry-run option to prevent writing the dumpfile
Add a --dry-run option to run all operations without writing the dump to the output file.
Signed-off-by: Julien Thierry jthierry@redhat.com Signed-off-by: Kazuhito Hagio k-hagio-ab@nec.com
Signed-off-by: Tao Liu ltao@redhat.com --- ...0.21-makedumpfile-Add-dry-run-option.patch | 177 ++++++++++++++++++ kexec-tools.spec | 2 + 2 files changed, 179 insertions(+) create mode 100644 kexec-tools-2.0.21-makedumpfile-Add-dry-run-option.patch
diff --git a/kexec-tools-2.0.21-makedumpfile-Add-dry-run-option.patch b/kexec-tools-2.0.21-makedumpfile-Add-dry-run-option.patch new file mode 100644 index 0000000..ffe8a39 --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-Add-dry-run-option.patch @@ -0,0 +1,177 @@ +From 3422e1d6bc3511c5af9cb05ba74ad97dd93ffd7f Mon Sep 17 00:00:00 2001 +From: Julien Thierry jthierry@redhat.com +Date: Tue, 24 Nov 2020 10:45:24 +0000 +Subject: [PATCH 02/12] [PATCH 1/2] Add --dry-run option to prevent writing the + dumpfile + +Add a --dry-run option to run all operations without writing the +dump to the output file. + +Signed-off-by: Julien Thierry jthierry@redhat.com +Signed-off-by: Kazuhito Hagio k-hagio-ab@nec.com +--- + makedumpfile.8 | 6 ++++++ + makedumpfile.c | 37 ++++++++++++++++++++++++++++++------- + makedumpfile.h | 2 ++ + print_info.c | 3 +++ + 4 files changed, 41 insertions(+), 7 deletions(-) + +diff --git a/makedumpfile-1.6.8/makedumpfile.8 b/makedumpfile-1.6.8/makedumpfile.8 +index b68a7e3..5e902cd 100644 +--- a/makedumpfile-1.6.8/makedumpfile.8 ++++ b/makedumpfile-1.6.8/makedumpfile.8 +@@ -637,6 +637,12 @@ Show the version of makedumpfile. + Only check whether the command-line parameters are valid or not, and exit. + Preferable to be given as the first parameter. + ++.TP ++\fB--dry-run\fR ++Do not write the output dump file while still performing operations specified ++by other options. ++This option cannot be used with the --dump-dmesg, --reassemble and -g options. ++ + .SH ENVIRONMENT VARIABLES + + .TP 8 +diff --git a/makedumpfile-1.6.8/makedumpfile.c b/makedumpfile-1.6.8/makedumpfile.c +index ecd63fa..8c80c49 100644 +--- a/makedumpfile-1.6.8/makedumpfile.c ++++ b/makedumpfile-1.6.8/makedumpfile.c +@@ -1372,6 +1372,8 @@ open_dump_file(void) + if (info->flag_flatten) { + fd = STDOUT_FILENO; + info->name_dumpfile = filename_stdout; ++ } else if (info->flag_dry_run) { ++ fd = -1; + } else if ((fd = open(info->name_dumpfile, open_flags, + S_IRUSR|S_IWUSR)) < 0) { + ERRMSG("Can't open the dump file(%s). %s\n", +@@ -4711,6 +4713,9 @@ write_and_check_space(int fd, void *buf, size_t buf_size, char *file_name) + { + int status, written_size = 0; + ++ if (info->flag_dry_run) ++ return TRUE; ++ + while (written_size < buf_size) { + status = write(fd, buf + written_size, + buf_size - written_size); +@@ -4748,13 +4753,12 @@ write_buffer(int fd, off_t offset, void *buf, size_t buf_size, char *file_name) + } + if (!write_and_check_space(fd, &fdh, sizeof(fdh), file_name)) + return FALSE; +- } else { +- if (lseek(fd, offset, SEEK_SET) == failed) { +- ERRMSG("Can't seek the dump file(%s). %s\n", +- file_name, strerror(errno)); +- return FALSE; +- } ++ } else if (!info->flag_dry_run && ++ lseek(fd, offset, SEEK_SET) == failed) { ++ ERRMSG("Can't seek the dump file(%s). %s\n", file_name, strerror(errno)); ++ return FALSE; + } ++ + if (!write_and_check_space(fd, buf, buf_size, file_name)) + return FALSE; + +@@ -9112,7 +9116,7 @@ close_dump_memory(void) + void + close_dump_file(void) + { +- if (info->flag_flatten) ++ if (info->flag_flatten || info->flag_dry_run) + return; + + if (close(info->fd_dumpfile) < 0) +@@ -10985,6 +10989,11 @@ check_param_for_generating_vmcoreinfo(int argc, char *argv[]) + + return FALSE; + ++ if (info->flag_dry_run) { ++ MSG("--dry-run cannot be used with -g.\n"); ++ return FALSE; ++ } ++ + return TRUE; + } + +@@ -11029,6 +11038,11 @@ check_param_for_reassembling_dumpfile(int argc, char *argv[]) + || info->flag_exclude_xen_dom || info->flag_split) + return FALSE; + ++ if (info->flag_dry_run) { ++ MSG("--dry-run cannot be used with --reassemble.\n"); ++ return FALSE; ++ } ++ + if ((info->splitting_info + = malloc(sizeof(struct splitting_info) * info->num_dumpfile)) + == NULL) { +@@ -11057,6 +11071,11 @@ check_param_for_creating_dumpfile(int argc, char *argv[]) + || (info->flag_read_vmcoreinfo && info->name_xen_syms)) + return FALSE; + ++ if (info->flag_dry_run && info->flag_dmesg) { ++ MSG("--dry-run cannot be used with --dump-dmesg.\n"); ++ return FALSE; ++ } ++ + if (info->flag_flatten && info->flag_split) + return FALSE; + +@@ -11520,6 +11539,7 @@ static struct option longopts[] = { + {"work-dir", required_argument, NULL, OPT_WORKING_DIR}, + {"num-threads", required_argument, NULL, OPT_NUM_THREADS}, + {"check-params", no_argument, NULL, OPT_CHECK_PARAMS}, ++ {"dry-run", no_argument, NULL, OPT_DRY_RUN}, + {0, 0, 0, 0} + }; + +@@ -11686,6 +11706,9 @@ main(int argc, char *argv[]) + info->flag_check_params = TRUE; + message_level = DEFAULT_MSG_LEVEL; + break; ++ case OPT_DRY_RUN: ++ info->flag_dry_run = TRUE; ++ break; + case '?': + MSG("Commandline parameter is invalid.\n"); + MSG("Try `makedumpfile --help' for more information.\n"); +diff --git a/makedumpfile-1.6.8/makedumpfile.h b/makedumpfile-1.6.8/makedumpfile.h +index 5f50080..4c4222c 100644 +--- a/makedumpfile-1.6.8/makedumpfile.h ++++ b/makedumpfile-1.6.8/makedumpfile.h +@@ -1322,6 +1322,7 @@ struct DumpInfo { + int flag_vmemmap; /* kernel supports vmemmap address space */ + int flag_excludevm; /* -e - excluding unused vmemmap pages */ + int flag_use_count; /* _refcount is named _count in struct page */ ++ int flag_dry_run; /* do not create a vmcore file */ + unsigned long vaddr_for_vtop; /* virtual address for debugging */ + long page_size; /* size of page */ + long page_shift; +@@ -2425,6 +2426,7 @@ struct elf_prstatus { + #define OPT_NUM_THREADS OPT_START+16 + #define OPT_PARTIAL_DMESG OPT_START+17 + #define OPT_CHECK_PARAMS OPT_START+18 ++#define OPT_DRY_RUN OPT_START+19 + + /* + * Function Prototype. +diff --git a/makedumpfile-1.6.8/print_info.c b/makedumpfile-1.6.8/print_info.c +index e0c38b4..d2b0cb7 100644 +--- a/makedumpfile-1.6.8/print_info.c ++++ b/makedumpfile-1.6.8/print_info.c +@@ -308,6 +308,9 @@ print_usage(void) + MSG(" the crashkernel range, then calculates the page number of different kind per\n"); + MSG(" vmcoreinfo. So currently /proc/kcore need be specified explicitly.\n"); + MSG("\n"); ++ MSG(" [--dry-run]:\n"); ++ MSG(" This option runs makedumpfile without writting output dump file.\n"); ++ MSG("\n"); + MSG(" [-D]:\n"); + MSG(" Print debugging message.\n"); + MSG("\n"); +-- +2.29.2 + diff --git a/kexec-tools.spec b/kexec-tools.spec index 3cbecb5..52c9932 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -105,6 +105,7 @@ Patch601: ./kexec-tools-2.0.20-eppic-Remove-duplicated-variable-declaration.patc Patch603: ./kexec-tools-2.0.20-makedumpfile-printk-add-support-for-lockless-ringbuffer.patch Patch604: ./kexec-tools-2.0.20-makedumpfile-printk-use-committed-finalized-state-value.patch Patch605: ./kexec-tools-2.0.21-makedumpfile-make-use-of-uts_namespace.name-offset-in-VMCOR.patch +Patch606: ./kexec-tools-2.0.21-makedumpfile-Add-dry-run-option.patch
%description kexec-tools provides /sbin/kexec binary that facilitates a new @@ -124,6 +125,7 @@ tar -z -x -v -f %{SOURCE19} %patch603 -p1 %patch604 -p1 %patch605 -p1 +%patch606 -p1
%ifarch ppc %define archdef ARCH=ppc