Refiltering mode is used in 1st kernel environment, we can expect enough space from TMPDIR to store the bitmap file. Signed-off-by: Atsushi Kumagai <ats-kumagai at wm.jp.nec.com> --- makedumpfile.c | 52 ++++++++++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index e58940b..fe7670f 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1033,7 +1033,8 @@ open_dump_bitmap(void) char *tmpname; /* Unnecessary to open */ - if (!info->working_dir && !info->flag_reassemble && !info->flag_mem_usage) + if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering + && !info->flag_mem_usage) return TRUE; tmpname = getenv("TMPDIR"); @@ -3198,13 +3199,6 @@ initial(void) return FALSE; } - if(info->flag_cyclic) { - info->flag_cyclic = FALSE; - MSG("Switched running mode from cyclic to non-cyclic,\n"); - MSG("because the cyclic mode doesn't support refiltering\n"); - MSG("kdump compressed format.\n"); - } - info->phys_base = info->kh_memory->phys_base; info->max_dump_level |= info->kh_memory->dump_level; @@ -3256,7 +3250,8 @@ out: if (!get_max_mapnr()) return FALSE; - if (info->working_dir || info->flag_reassemble || info->flag_mem_usage) { + if (info->working_dir || info->flag_reassemble || info->flag_refiltering + || info->flag_mem_usage) { /* Implemented as non-cyclic mode based on the file */ info->flag_cyclic = FALSE; info->pfn_cyclic = info->max_mapnr; @@ -3593,24 +3588,6 @@ set_bit_on_2nd_bitmap_for_kernel(mdf_pfn_t pfn, struct cycle *cycle) return set_bit_on_2nd_bitmap(pfn, cycle); } -static inline int -is_in_segs(unsigned long long paddr) -{ - if (info->flag_refiltering || info->flag_sadump) { - static struct dump_bitmap bitmap1 = {0}; - - if (bitmap1.fd == 0) - initialize_1st_bitmap(&bitmap1); - - return is_dumpable(&bitmap1, paddr_to_pfn(paddr), NULL); - } - - if (paddr_to_offset(paddr)) - return TRUE; - else - return FALSE; -} - int read_cache(struct cache_data *cd) { @@ -4723,6 +4700,24 @@ create_1st_bitmap(struct cycle *cycle) } } +static inline int +is_in_segs(unsigned long long paddr) +{ + if (info->flag_refiltering || info->flag_sadump) { + if (info->bitmap1->fd == 0) { + initialize_1st_bitmap(info->bitmap1); + create_1st_bitmap_file(); + } + + return is_dumpable(info->bitmap1, paddr_to_pfn(paddr), NULL); + } + + if (paddr_to_offset(paddr)) + return TRUE; + else + return FALSE; +} + /* * Exclude the page filled with zero in case of creating an elf dumpfile. */ @@ -6945,7 +6940,8 @@ close_dump_file(void) void close_dump_bitmap(void) { - if (!info->working_dir && !info->flag_reassemble && !info->flag_mem_usage) + if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering + && !info->flag_mem_usage) return; if ((info->fd_bitmap = close(info->fd_bitmap)) < 0) -- 1.9.0