[PATCH v3] Fix free bitmap_buffer_cyclic error
Atsushi Kumagai
kumagai-atsushi at mxc.nes.nec.co.jp
Wed May 7 23:47:10 PDT 2014
>Description:
>In create_dump_bitmap() and write_kdump_pages_and_bitmap_cyclic(),
>What should be freed is info->partial_bitmap instead of info->bitmap.
>
>Solution:
>Add two functions to free the bitmap_buffer_cyclic. info->partial_bitmap1
>is freed by free_bitmap1_buffer_cyclic(). info->partial_bitmap2 is
>freed by free_bitmap2_buffer_cyclic(). At the same time, remove
>thoes frees that free partial_bitmap1 or partial_bitmap2 at the end
>of main() because partial_bitmap1 and partial_bitmap2 has been freed
>after dump file has been written out, so there is no need to free it
>again at the end of main.
Good, I'll merge this patch into v1.5.7.
Thanks
Atsushi Kumagai
>Signed-off-by: Arthur Zou <zzou at redhat.com>
>---
> makedumpfile.c | 38 ++++++++++++++++++++++++++++++--------
> 1 file changed, 30 insertions(+), 8 deletions(-)
>
>diff --git a/makedumpfile.c b/makedumpfile.c
>index 0b31932..d01d5ab 100644
>--- a/makedumpfile.c
>+++ b/makedumpfile.c
>@@ -5130,6 +5130,31 @@ free_bitmap_buffer(void)
> free_bitmap2_buffer();
> }
>
>+void
>+free_bitmap1_buffer_cyclic()
>+{
>+ if (info->partial_bitmap1 != NULL){
>+ free(info->partial_bitmap1);
>+ info->partial_bitmap1 = NULL;
>+ }
>+}
>+
>+void
>+free_bitmap2_buffer_cyclic()
>+{
>+ if (info->partial_bitmap2 != NULL){
>+ free(info->partial_bitmap2);
>+ info->partial_bitmap2 = NULL;
>+ }
>+}
>+
>+void
>+free_bitmap_buffer_cyclic()
>+{
>+ free_bitmap1_buffer_cyclic();
>+ free_bitmap2_buffer_cyclic();
>+}
>+
> int
> create_dump_bitmap(void)
> {
>@@ -5147,8 +5172,7 @@ create_dump_bitmap(void)
> goto out;
>
> info->num_dumpable = get_num_dumpable_cyclic();
>-
>- free_bitmap2_buffer();
>+ free_bitmap2_buffer_cyclic();
> }
>
> } else {
>@@ -6190,6 +6214,8 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)
> if (!write_cache_bufsz(cd_page))
> return FALSE;
>
>+ free_bitmap_buffer_cyclic();
>+
> /*
> * print [100 %]
> */
>@@ -6947,7 +6973,7 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data *cd_header, struct cache_d
> }
>
>
>- free_bitmap1_buffer();
>+ free_bitmap1_buffer_cyclic();
>
> if (!prepare_bitmap2_buffer_cyclic())
> return FALSE;
>@@ -6970,7 +6996,7 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data *cd_header, struct cache_d
> return FALSE;
> }
>
>-
>+ free_bitmap2_buffer_cyclic();
>
> gettimeofday(&tv_start, NULL);
>
>@@ -9349,10 +9375,6 @@ out:
> free(info->splitting_info);
> if (info->p2m_mfn_frame_list != NULL)
> free(info->p2m_mfn_frame_list);
>- if (info->partial_bitmap1 != NULL)
>- free(info->partial_bitmap1);
>- if (info->partial_bitmap2 != NULL)
>- free(info->partial_bitmap2);
> free(info);
> }
> free_elf_info();
>--
>1.8.4.2
More information about the kexec
mailing list