[PATCH] makedumpfile: enhance bitmap writting function in reassemble mode
Jingbai Ma
jingbai.ma at hp.com
Mon Oct 14 09:04:40 EDT 2013
This patch Enhance bitmap writting function in reassemble_kdump_header().
Prevent bitmap writting failure if the size of bitmap is too large to fit a
sigle write.
Signed-off-by: Jingbai Ma <jingbai.ma at hp.com>
---
makedumpfile.c | 45 +++++++++++++++++++++++++++++++--------------
1 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/makedumpfile.c b/makedumpfile.c
index 130cf9f..f43454a 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -7990,6 +7990,7 @@ reassemble_kdump_header(void)
struct disk_dump_header dh;
struct kdump_sub_header kh;
char *buf_bitmap = NULL;
+ ssize_t status, read_size, written_size;
/*
* Write common header.
@@ -8068,10 +8069,16 @@ reassemble_kdump_header(void)
SPLITTING_DUMPFILE(0), strerror(errno));
goto out;
}
- if (read(fd, buf_bitmap, info->len_bitmap) != info->len_bitmap) {
- ERRMSG("Can't read a file(%s). %s\n",
- SPLITTING_DUMPFILE(0), strerror(errno));
- goto out;
+ read_size = 0;
+ while (read_size < info->len_bitmap) {
+ status = read(fd, buf_bitmap + read_size, info->len_bitmap
+ - read_size);
+ if (status < 0) {
+ ERRMSG("Can't read a file(%s). %s\n",
+ SPLITTING_DUMPFILE(0), strerror(errno));
+ goto out;
+ }
+ read_size += status;
}
if (lseek(info->fd_dumpfile, offset, SEEK_SET) < 0) {
@@ -8079,11 +8086,16 @@ reassemble_kdump_header(void)
info->name_dumpfile, strerror(errno));
goto out;
}
- if (write(info->fd_dumpfile, buf_bitmap, info->len_bitmap)
- != info->len_bitmap) {
- ERRMSG("Can't write a file(%s). %s\n",
- info->name_dumpfile, strerror(errno));
- goto out;
+ written_size = 0;
+ while (written_size < info->len_bitmap) {
+ status = write(info->fd_dumpfile, buf_bitmap + written_size,
+ info->len_bitmap - written_size);
+ if (status < 0) {
+ ERRMSG("Can't write a file(%s). %s\n",
+ info->name_dumpfile, strerror(errno));
+ goto out;
+ }
+ written_size += status;
}
if (lseek(info->fd_bitmap, 0x0, SEEK_SET) < 0) {
@@ -8091,11 +8103,16 @@ reassemble_kdump_header(void)
info->name_bitmap, strerror(errno));
goto out;
}
- if (write(info->fd_bitmap, buf_bitmap, info->len_bitmap)
- != info->len_bitmap) {
- ERRMSG("Can't write a file(%s). %s\n",
- info->name_bitmap, strerror(errno));
- goto out;
+ written_size = 0;
+ while (written_size < info->len_bitmap) {
+ status = write(info->fd_bitmap, buf_bitmap + written_size,
+ info->len_bitmap - written_size);
+ if (status < 0) {
+ ERRMSG("Can't write a file(%s). %s\n",
+ info->name_bitmap, strerror(errno));
+ goto out;
+ }
+ written_size += status;
}
ret = TRUE;
More information about the kexec
mailing list