Kexec Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Ken'ichi Ohmichi" <oomichi@mxs.nes.nec.co.jp>
To: Ken'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp>
Cc: kexec@lists.infradead.org, tindoh@redhat.com,
	usui@mxm.nes.nec.co.jp, CAI Qian <caiqian@redhat.com>,
	anderson@redhat.com
Subject: [PATCH 4/5] Store vmcoreinfo data into a kdump-compressed dumpfile.
Date: Tue, 13 Oct 2009 14:20:34 +0900	[thread overview]
Message-ID: <4AD40E22.2080609@mxs.nes.nec.co.jp> (raw)
In-Reply-To: <4AD40DB4.6030808@mxs.nes.nec.co.jp>

[PATCH 4/5] Store vmcoreinfo data into a kdump-compressed dumpfile.

By applying this patch, makedumpfile takes vmcoreinfo data from
/proc/vmcore and stores the data into a dumpfile in the kdump-
compressed fomat. By the next patch, makedumpfile takes the data
from a dumpfile in the kdump-compressed format and uses the data
for re-filtering.


Signed-off-by: Ken'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp>
---
diff -rpuN a/diskdump_mod.h b/diskdump_mod.h
--- a/diskdump_mod.h	2009-10-13 12:19:53.000000000 +0900
+++ b/diskdump_mod.h	2009-10-13 12:20:03.000000000 +0900
@@ -71,6 +71,8 @@ struct kdump_sub_header {
 	int		split;		/* header_version 2 and later */
 	unsigned long	start_pfn;	/* header_version 2 and later */
 	unsigned long	end_pfn;	/* header_version 2 and later */
+	off_t		offset_vmcoreinfo;/* header_version 3 and later */
+	unsigned long	size_vmcoreinfo;  /* header_version 3 and later */
 };
 
 /* page flags */
diff -rpuN a/makedumpfile.c b/makedumpfile.c
--- a/makedumpfile.c	2009-10-13 12:19:53.000000000 +0900
+++ b/makedumpfile.c	2009-10-13 12:23:49.000000000 +0900
@@ -5437,9 +5437,11 @@ out:
 int
 write_kdump_header(void)
 {
+	int ret = FALSE;
 	size_t size;
 	struct disk_dump_header *dh = info->dump_header;
 	struct kdump_sub_header kh;
+	char *buf = NULL;
 
 	if (info->flag_elf_dumpfile)
 		return FALSE;
@@ -5448,9 +5450,10 @@ write_kdump_header(void)
 	 * Write common header
 	 */
 	strcpy(dh->signature, KDUMP_SIGNATURE);
-	dh->header_version = 2;
-	dh->block_size     = info->page_size;
-	dh->sub_hdr_size   = divideup(sizeof(kh), dh->block_size);
+	dh->header_version = 3;
+  	dh->block_size     = info->page_size;
+	dh->sub_hdr_size   = sizeof(kh) + info->size_vmcoreinfo;
+	dh->sub_hdr_size   = divideup(dh->sub_hdr_size, dh->block_size);
 	dh->max_mapnr      = info->max_mapnr;
 	dh->nr_cpus        = 1;
 	dh->bitmap_blocks  = divideup(info->len_bitmap, dh->block_size);
@@ -5473,14 +5476,47 @@ write_kdump_header(void)
 		kh.start_pfn = info->split_start_pfn;
 		kh.end_pfn   = info->split_end_pfn;
 	}
+	if (info->offset_vmcoreinfo && info->size_vmcoreinfo) {
+		kh.offset_vmcoreinfo  = DISKDUMP_HDADER_BLOCKS * dh->block_size;
+		kh.offset_vmcoreinfo += sizeof(kh);
+		kh.size_vmcoreinfo    = info->size_vmcoreinfo;
+
+		buf = malloc(info->size_vmcoreinfo);
+		if (buf == NULL) {
+			ERRMSG("Can't allocate memory for vmcoreinfo. %s\n",
+			    strerror(errno));
+			return FALSE;
+		}
+		if (lseek(info->fd_memory, info->offset_vmcoreinfo, SEEK_SET)
+		    < 0) {
+			ERRMSG("Can't seek the dump memory(%s). %s\n",
+			    info->name_memory, strerror(errno));
+			goto out;
+		}
+		if (read(info->fd_memory, buf, info->size_vmcoreinfo)
+		    != info->size_vmcoreinfo) {
+			ERRMSG("Can't read the dump memory(%s). %s\n",
+			    info->name_memory, strerror(errno));
+			goto out;
+		}
+	}
 	if (!write_buffer(info->fd_dumpfile, dh->block_size, &kh,
 	    size, info->name_dumpfile))
-		return FALSE;
+		goto out;
+
+	if (!write_buffer(info->fd_dumpfile, kh.offset_vmcoreinfo, buf,
+	    kh.size_vmcoreinfo, info->name_dumpfile))
+		goto out;
 
 	info->offset_bitmap1
 	    = (DISKDUMP_HDADER_BLOCKS + dh->sub_hdr_size) * dh->block_size;
 
-	return TRUE;
+	ret = TRUE;
+out:
+	if (buf)
+		free(buf);
+
+	return ret;
 }
 
 void

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  parent reply	other threads:[~2009-10-13  5:59 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-09  2:40 makedumpfile-1.3.4: Support kdump-compressed format for input file Ken'ichi Ohmichi
2009-10-09  8:22 ` Ken'ichi Ohmichi
2009-10-10  8:51 ` CAI Qian
2009-10-13  1:02   ` Ken'ichi Ohmichi
2009-10-13  5:18     ` [PATCH 0/5] make '-x'/'-i' option unnecessary for re-filtering Ken'ichi Ohmichi
2009-10-13  5:19       ` [PATCH 1/5] Cleanup: Set a meaning value for KDUMP_SUB_HEADER_BLOCKS Ken'ichi Ohmichi
2009-10-13  5:19       ` [PATCH 2/5] Cleanup: Fix some indents in write_kdump_header() Ken'ichi Ohmichi
2009-10-13  5:20       ` {PATCH 3/5] Cleanup: Shorten the declaration name of kdump_sub_header Ken'ichi Ohmichi
2009-10-13  5:20       ` Ken'ichi Ohmichi [this message]
2009-10-13  5:20       ` [PATCH 5/5] Read vmcoreinfo data from a kdump-compressed dumpfile Ken'ichi Ohmichi
2009-10-16 15:59       ` [PATCH 0/5] make '-x'/'-i' option unnecessary for re-filtering CAI Qian
2009-10-19  5:21         ` Ken'ichi Ohmichi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4AD40E22.2080609@mxs.nes.nec.co.jp \
    --to=oomichi@mxs.nes.nec.co.jp \
    --cc=anderson@redhat.com \
    --cc=caiqian@redhat.com \
    --cc=kexec@lists.infradead.org \
    --cc=tindoh@redhat.com \
    --cc=usui@mxm.nes.nec.co.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox