(2013/10/14 21:16), Jingbai Ma wrote: <cut> > @@ -125,7 +126,7 @@ get_max_mapnr(void) > unsigned long long max_paddr; > > if (info->flag_refiltering) { > - info->max_mapnr = info->dh_memory->max_mapnr; > + info->max_mapnr = info->kh_memory->max_mapnr_64; > return TRUE; > } > Please: if (dh.header_version < 6) info->max_mapnr = info->dh_memmory->max_mapnr; else info->max_mapnr = info->kh_memory->max_mapnr_64; > @@ -783,6 +784,10 @@ get_kdump_compressed_header_info(char *filename) > ERRMSG("header does not have dump_level member\n"); > return FALSE; > } > + > + if (dh.header_version < 6) > + kh.max_mapnr_64 = dh.max_mapnr; > + Again, please don't do this. It's confusing if in-memory header data is not identical to in-disk one. > DEBUG_MSG("diskdump main header\n"); > DEBUG_MSG(" signature : %s\n", dh.signature); > DEBUG_MSG(" header_version : %d\n", dh.header_version); > @@ -802,6 +807,12 @@ get_kdump_compressed_header_info(char *filename) > DEBUG_MSG(" split : %d\n", kh.split); > DEBUG_MSG(" start_pfn : 0x%lx\n", kh.start_pfn); > DEBUG_MSG(" end_pfn : 0x%lx\n", kh.end_pfn); > + if (dh.header_version >= 6) { > + /* A dumpfile contains full 64bit values. */ > + DEBUG_MSG(" start_pfn_64 : 0x%llx\n", kh.start_pfn_64); > + DEBUG_MSG(" end_pfn_64 : 0x%llx\n", kh.end_pfn_64); > + DEBUG_MSG(" max_mapnr_64 : 0x%llx\n", kh.max_mapnr_64); > + } > > info->dh_memory = malloc(sizeof(dh)); > if (info->dh_memory == NULL) { > @@ -2766,14 +2777,16 @@ int > initialize_bitmap_memory(void) > { > struct disk_dump_header *dh; > + struct kdump_sub_header *kh; > struct dump_bitmap *bmp; > off_t bitmap_offset; > - int bitmap_len, max_sect_len; > + off_t bitmap_len, max_sect_len; > unsigned long pfn; > int i, j; > long block_size; > > dh = info->dh_memory; > + kh = info->kh_memory; > block_size = dh->block_size; > > bitmap_offset > @@ -2793,7 +2806,7 @@ initialize_bitmap_memory(void) > bmp->offset = bitmap_offset + bitmap_len / 2; > info->bitmap_memory = bmp; > > - max_sect_len = divideup(dh->max_mapnr, BITMAP_SECT_LEN); > + max_sect_len = divideup(kh->max_mapnr_64, BITMAP_SECT_LEN); > info->valid_pages = calloc(sizeof(ulong), max_sect_len); Ah, please here needs to be fixed, too. Here should have been used sizeof(int) but now sizeof(off_t) should be used. -- Thanks. HATAYAMA, Daisuke