(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 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility