diff -puN backup/v1.1.1/makedumpfile.c makedumpfile/makedumpfile.c
--- backup/v1.1.1/makedumpfile.c	2007-02-08 18:21:51.000000000 +0900
+++ makedumpfile/makedumpfile.c	2007-03-05 15:05:35.000000000 +0900
@@ -3433,6 +3433,7 @@ write_kdump_header(struct DumpInfo *info
 	 * Write common header
 	 */
 	strcpy(dh->signature, KDUMP_SIGNATURE);
+	dh->header_version = 1;
 	dh->block_size   = info->page_size;
 	dh->sub_hdr_size = 1;
 	dh->max_mapnr    = info->max_mapnr;
@@ -3839,10 +3840,9 @@ out:
 int
 write_kdump_pages(struct DumpInfo *info)
 {
-	unsigned int flag_change_bitmap = 0;
  	unsigned long long pfn, per, num_dumpable = 0, num_dumped = 0;
 	unsigned long size_out;
-	struct page_desc pd;
+	struct page_desc pd, pd_zero;
 	off_t offset_data = 0, offset_memory = 0;
 	struct disk_dump_header *dh = info->dump_header;
 	unsigned char *buf = NULL, *buf_out = NULL;
@@ -3887,7 +3887,7 @@ write_kdump_pages(struct DumpInfo *info)
 	bitmap2.buf       = NULL;
 	bitmap2.offset    = info->len_bitmap/2;
 
-	if ((buf = malloc(info->page_size)) == NULL) {
+	if ((buf = calloc(1, info->page_size)) == NULL) {
 		ERRMSG("Can't allocate memory for the page. %s\n",
 		    strerror(errno));
 		goto out;
@@ -3953,23 +3953,28 @@ write_kdump_pages(struct DumpInfo *info)
 		goto out;
 	}
 
+	/*
+	 * Write the data of zero-filled page.
+	 */
+	if (info->dump_level & DL_EXCLUDE_ZERO) {
+		pd_zero.size = info->page_size;
+		pd_zero.flags = 0;
+		pd_zero.offset = offset_data;
+		pd_zero.page_flags = 0;
+		if (!write_cache(&pdata, buf, pd_zero.size))
+			goto out;
+		offset_data  += pd_zero.size;
+	}
 	for (pfn = 0; pfn < info->max_mapnr; pfn++) {
 
 		if ((num_dumped % per) == 0)
 			print_progress(num_dumped, num_dumpable);
 
 		if ((pfn % PFN_BUFBITMAP) == 0) {
-			if (flag_change_bitmap) {
-				bm2.buf_size = BUFSIZE_BITMAP;
-				bm2.offset  -= BUFSIZE_BITMAP;
-				if (!write_cache_bufsz(&bm2))
-					goto out;
-			}
 			if (info->len_bitmap - bm2.offset < BUFSIZE_BITMAP)
 				bm2.cache_size = info->len_bitmap - bm2.offset;
 			if (!read_cache(&bm2))
 				goto out;
-			flag_change_bitmap = 0;
 		}
 
 		/*
@@ -4004,8 +4009,8 @@ write_kdump_pages(struct DumpInfo *info)
 		 */
 		if ((info->dump_level & DL_EXCLUDE_ZERO)
 		    && is_zero_page(buf, info->page_size)) {
-			set_bitmap(bm2.buf, pfn%PFN_BUFBITMAP, 0);
-			flag_change_bitmap = 1;
+			if (!write_cache(&pdesc, &pd_zero, sizeof(page_desc_t)))
+				goto out;
 			continue;
 		}
 		/*
@@ -4047,12 +4052,7 @@ write_kdump_pages(struct DumpInfo *info)
 		goto out;
 	if (!write_cache_bufsz(&pdesc))
 		goto out;
-	if (flag_change_bitmap) {
-		bm2.buf_size = BUFSIZE_BITMAP;
-		bm2.offset  -= BUFSIZE_BITMAP;
-		if (!write_cache_bufsz(&bm2))
-			goto out;
-	}
+
 	/*
 	 * Print the progress of the end.
 	 */
