>kdump-compressed: >Dump the bitmap before any page header and page data. This format use >"status" of "disk_dump_header" to indicate that it has been modified. > >Signed-of-by: Wang Xiao <wangx.fnst at cn.fujitsu.com> >--- > diskdump_mod.h | 2 ++ > makedumpfile.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- > 2 files changed, 82 insertions(+), 5 deletions(-) > [snip] >+int >+check_and_modify_multiple_kdump_headers() { >+ int i, status, ret = TRUE; >+ pid_t pid; >+ pid_t array_pid[info->num_dumpfile]; >+ >+ for (i = 0; i < info->num_dumpfile; i++) { >+ if ((pid = fork()) < 0) { >+ return FALSE; >+ >+ } else if (pid == 0) { /* Child */ >+ if (!check_and_modify_kdump_headers(SPLITTING_DUMPFILE(i))) >+ exit(1); reassemble_kdump_header() adopts only the dh.status of SPLITTING_DUMPFILE(0), we should fix it to take over incomplete flags of the other dump files. Thanks Atsushi Kumagai >+ exit(0); >+ } >+ array_pid[i] = pid; >+ } >+ >+ for (i = 0; i < info->num_dumpfile; i++) { >+ waitpid(array_pid[i], &status, WUNTRACED); >+ if (!WIFEXITED(status) || WEXITSTATUS(status) == 1) { >+ ERRMSG("Check and modify the incomplete dumpfile(%s) failed.\n", >+ SPLITTING_DUMPFILE(i)); >+ ret = FALSE; >+ } >+ } >+ >+ return ret; >+} >+ >+int > rearrange_dumpdata(void) > { > int read_size, tmp_read_size; >@@ -7185,11 +7250,11 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data *cd_header, struct cache_d > if (!exclude_unnecessary_pages_cyclic(&cycle)) > return FALSE; > >- if (!write_kdump_pages_cyclic(cd_header, cd_page, &pd_zero, >- &offset_data, &cycle)) >+ if (!write_kdump_bitmap2_cyclic(&cycle)) > return FALSE; > >- if (!write_kdump_bitmap2_cyclic(&cycle)) >+ if (!write_kdump_pages_cyclic(cd_header, cd_page, &pd_zero, >+ &offset_data, &cycle)) > return FALSE; > } > >@@ -8189,12 +8254,12 @@ writeout_dumpfile(void) > } else { > if (!write_kdump_header()) > goto out; >+ if (!write_kdump_bitmap()) >+ goto out; > if (!write_kdump_pages(&cd_header, &cd_page)) > goto out; > if (!write_kdump_eraseinfo(&cd_page)) > goto out; >- if (!write_kdump_bitmap()) >- goto out; > } > if (info->flag_flatten) { > if (!write_end_flat_header()) >@@ -8405,6 +8470,16 @@ retry: > if (check_and_modify_elf_headers(info->name_dumpfile)) > MSG("This is an incomplete dumpfile," > " but might analyzable.\n"); >+ } else { >+ if (info->flag_split) { >+ if (check_and_modify_multiple_kdump_headers()) >+ MSG("The splited dumpfiles are incomplete," >+ " but might analyzable.\n"); >+ } else { >+ if (check_and_modify_kdump_headers(info->name_dumpfile)) >+ MSG("This is an incomplete dumpfile," >+ " but might analyzable.\n"); >+ } > } > } > >-- >1.8.3.1 > > >_______________________________________________ >kexec mailing list >kexec at lists.infradead.org >http://lists.infradead.org/mailman/listinfo/kexec