Function is used to write vmcore. If flag_flatten is specified, flatten format will be used. In flatten format, data is written block by block in vmcore. struct MakedumpfileDataHeader is used to indicate the offset and size of a data block.
struct MakedumpfileDataHeader { int64_t offset; int64_t buf_size; }; Signed-off-by: Qiao Nuohan <qiaonuo...@cn.fujitsu.com> Reviewed-by: Zhang Xiaohe <zhan...@cn.fujitsu.com> --- dump.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/dump.c b/dump.c index f04d4fc..6f14b8d 100644 --- a/dump.c +++ b/dump.c @@ -714,6 +714,34 @@ static int write_end_flat_header(int fd) return 0; } +static int write_buffer(int fd, bool flag_flatten, off_t offset, void *buf, + size_t size) +{ + size_t written_size; + MakedumpfileDataHeader mdh; + + if (flag_flatten) { + mdh.offset = cpu_to_be64(offset); + mdh.buf_size = cpu_to_be64(size); + + written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); + if (written_size != sizeof(mdh)) { + return -1; + } + } else { + if (lseek(fd, offset, SEEK_SET) < 0) { + return -1; + } + } + + written_size = qemu_write_full(fd, buf, size); + if (written_size != size) { + return -1; + } + + return 0; +} + static ram_addr_t get_start_block(DumpState *s) { RAMBlock *block; -- 1.7.1