[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