Hi Ken'ichi, On 08/16/2011 06:30 AM, Ken'ichi Ohmichi wrote: > > Hi Mahesh, > > On Wed, 18 May 2011 01:36:17 +0530 > Mahesh J Salgaonkar <mahesh at linux.vnet.ibm.com> wrote: >> @@ -9452,6 +9747,7 @@ reassemble_kdump_pages(void) >> struct cache_data cd_pd, cd_data; >> struct timeval tv_start; >> char *data = NULL; >> + unsigned long data_buf_size = info->page_size; >> >> initialize_2nd_bitmap(&bitmap2); >> >> @@ -9465,7 +9761,7 @@ reassemble_kdump_pages(void) >> free_cache_data(&cd_pd); >> return FALSE; >> } >> - if ((data = malloc(info->page_size)) == NULL) { >> + if ((data = malloc(data_buf_size)) == NULL) { >> ERRMSG("Can't allcate memory for page data.\n"); >> free_cache_data(&cd_pd); >> free_cache_data(&cd_data); >> @@ -9570,6 +9866,49 @@ reassemble_kdump_pages(void) >> if (!write_cache_bufsz(&cd_data)) >> goto out; >> >> + info->offset_eraseinfo = cd_data.offset; >> + /* Copy eraseinfo from split dumpfiles to o/p dumpfile */ >> + for (i = 0; i < info->num_dumpfile; i++) { >> + if (!SPLITTING_SIZE_EI(i)) >> + continue; >> + >> + if (SPLITTING_SIZE_EI(i) > data_buf_size) { >> + data_buf_size = SPLITTING_SIZE_EI(i); >> + if ((data = realloc(data, data_buf_size)) == NULL) { >> + ERRMSG("Can't allcate memory for eraseinfo" >> + " data.\n"); >> + goto out; >> + } >> + } >> + if ((fd = open(SPLITTING_DUMPFILE(i), O_RDONLY)) < 0) { >> + ERRMSG("Can't open a file(%s). %s\n", >> + SPLITTING_DUMPFILE(i), strerror(errno)); >> + goto out; >> + } >> + if (lseek(fd, SPLITTING_OFFSET_EI(i), SEEK_SET) < 0) { >> + ERRMSG("Can't seek a file(%s). %s\n", >> + SPLITTING_DUMPFILE(i), strerror(errno)); >> + goto out; >> + } >> + if (read(fd, data, SPLITTING_SIZE_EI(i)) != >> + SPLITTING_SIZE_EI(i)) { >> + ERRMSG("Can't read a file(%s). %s\n", >> + SPLITTING_DUMPFILE(i), strerror(errno)); >> + goto out; >> + } >> + if (!write_cache(&cd_data, data, SPLITTING_SIZE_EI(i))) >> + goto out; >> + info->size_eraseinfo += SPLITTING_SIZE_EI(i); >> + >> + close(fd); >> + fd = 0; >> + } >> + if (!write_cache_bufsz(&cd_data)) >> + goto out; >> + >> + if (!update_sub_header()) >> + goto out; > > The above update_sub_header() breaks "--reassemble" option if a dumpfile > does not contain eraseinfo data : My bad. Thanks for catching it. Thanks, -Mahesh. > > --- > # makedumpfile --split -d30 vmcore dump.1 dump.2 > Copying data : [100 %] > Copying data : [100 %] > > The dumpfiles are saved to dump.1, and dump.2. > > makedumpfile Completed. > # makedumpfile --reassemble dump.1 dump.2 dump.3 > Copying data : [100 %] > The dumpfile is saved to dump.3. > > makedumpfile Completed. > # crash vmlinux dump.3 > [..] > > crash: page excluded: kernel virtual address: ffffffff8040b220 type: "cpu_possible_mask" > # > --- > > The cause is that info->sub_header, which is written in update_sub_header(), > is filled with 0x0. > The following change fixes this problem: > > --- > @@ -9378,6 +9680,7 @@ reassemble_kdump_header(void) > info->name_dumpfile, strerror(errno)); > return FALSE; > } > + memcpy(&info->sub_header, &kh, sizeof(kh)); > > /* > * Write dump bitmap to both a dumpfile and a bitmap file. > --- > > Thanks > Ken'ichi Ohmichi > > _______________________________________________ > kexec mailing list > kexec at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec