Message ID | 20230717163855.7383-2-stephen.s.brennan@oracle.com |
---|---|
State | New |
Headers | show |
Series | dump: Only use the makedumpfile flattened format when necessary | expand |
On Mon, Jul 17, 2023 at 9:55 PM Stephen Brennan < stephen.s.brennan@oracle.com> wrote: > For the next patch, we need a reference to DumpState when writing data. > > Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com> > Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > dump/dump.c | 40 ++++++++++++++++++++-------------------- > include/sysemu/dump.h | 2 +- > 2 files changed, 21 insertions(+), 21 deletions(-) > > diff --git a/dump/dump.c b/dump/dump.c > index 1f1a6edcab..2708ddc135 100644 > --- a/dump/dump.c > +++ b/dump/dump.c > @@ -809,7 +809,7 @@ static void create_vmcore(DumpState *s, Error **errp) > dump_end(s, errp); > } > > -static int write_start_flat_header(int fd) > +static int write_start_flat_header(DumpState *s) > { > MakedumpfileHeader *mh; > int ret = 0; > @@ -824,7 +824,7 @@ static int write_start_flat_header(int fd) > mh->version = cpu_to_be64(VERSION_FLAT_HEADER); > > size_t written_size; > - written_size = qemu_write_full(fd, mh, MAX_SIZE_MDF_HEADER); > + written_size = qemu_write_full(s->fd, mh, MAX_SIZE_MDF_HEADER); > if (written_size != MAX_SIZE_MDF_HEADER) { > ret = -1; > } > @@ -833,7 +833,7 @@ static int write_start_flat_header(int fd) > return ret; > } > > -static int write_end_flat_header(int fd) > +static int write_end_flat_header(DumpState *s) > { > MakedumpfileDataHeader mdh; > > @@ -841,7 +841,7 @@ static int write_end_flat_header(int fd) > mdh.buf_size = END_FLAG_FLAT_HEADER; > > size_t written_size; > - written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); > + written_size = qemu_write_full(s->fd, &mdh, sizeof(mdh)); > if (written_size != sizeof(mdh)) { > return -1; > } > @@ -849,7 +849,7 @@ static int write_end_flat_header(int fd) > return 0; > } > > -static int write_buffer(int fd, off_t offset, const void *buf, size_t > size) > +static int write_buffer(DumpState *s, off_t offset, const void *buf, > size_t size) > { > size_t written_size; > MakedumpfileDataHeader mdh; > @@ -857,12 +857,12 @@ static int write_buffer(int fd, off_t offset, const > void *buf, size_t size) > mdh.offset = cpu_to_be64(offset); > mdh.buf_size = cpu_to_be64(size); > > - written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); > + written_size = qemu_write_full(s->fd, &mdh, sizeof(mdh)); > if (written_size != sizeof(mdh)) { > return -1; > } > > - written_size = qemu_write_full(fd, buf, size); > + written_size = qemu_write_full(s->fd, buf, size); > if (written_size != size) { > return -1; > } > @@ -982,7 +982,7 @@ static void create_header32(DumpState *s, Error **errp) > #endif > dh->status = cpu_to_dump32(s, status); > > - if (write_buffer(s->fd, 0, dh, size) < 0) { > + if (write_buffer(s, 0, dh, size) < 0) { > error_setg(errp, "dump: failed to write disk dump header"); > goto out; > } > @@ -1012,7 +1012,7 @@ static void create_header32(DumpState *s, Error > **errp) > kh->offset_note = cpu_to_dump64(s, offset_note); > kh->note_size = cpu_to_dump32(s, s->note_size); > > - if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * > + if (write_buffer(s, DISKDUMP_HEADER_BLOCKS * > block_size, kh, size) < 0) { > error_setg(errp, "dump: failed to write kdump sub header"); > goto out; > @@ -1027,7 +1027,7 @@ static void create_header32(DumpState *s, Error > **errp) > if (*errp) { > goto out; > } > - if (write_buffer(s->fd, offset_note, s->note_buf, > + if (write_buffer(s, offset_note, s->note_buf, > s->note_size) < 0) { > error_setg(errp, "dump: failed to write notes"); > goto out; > @@ -1093,7 +1093,7 @@ static void create_header64(DumpState *s, Error > **errp) > #endif > dh->status = cpu_to_dump32(s, status); > > - if (write_buffer(s->fd, 0, dh, size) < 0) { > + if (write_buffer(s, 0, dh, size) < 0) { > error_setg(errp, "dump: failed to write disk dump header"); > goto out; > } > @@ -1123,7 +1123,7 @@ static void create_header64(DumpState *s, Error > **errp) > kh->offset_note = cpu_to_dump64(s, offset_note); > kh->note_size = cpu_to_dump64(s, s->note_size); > > - if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * > + if (write_buffer(s, DISKDUMP_HEADER_BLOCKS * > block_size, kh, size) < 0) { > error_setg(errp, "dump: failed to write kdump sub header"); > goto out; > @@ -1139,7 +1139,7 @@ static void create_header64(DumpState *s, Error > **errp) > goto out; > } > > - if (write_buffer(s->fd, offset_note, s->note_buf, > + if (write_buffer(s, offset_note, s->note_buf, > s->note_size) < 0) { > error_setg(errp, "dump: failed to write notes"); > goto out; > @@ -1204,7 +1204,7 @@ static int set_dump_bitmap(uint64_t last_pfn, > uint64_t pfn, bool value, > while (old_offset < new_offset) { > /* calculate the offset and write dump_bitmap */ > offset_bitmap1 = s->offset_dump_bitmap + old_offset; > - if (write_buffer(s->fd, offset_bitmap1, buf, > + if (write_buffer(s, offset_bitmap1, buf, > bitmap_bufsize) < 0) { > return -1; > } > @@ -1212,7 +1212,7 @@ static int set_dump_bitmap(uint64_t last_pfn, > uint64_t pfn, bool value, > /* dump level 1 is chosen, so 1st and 2nd bitmap are same */ > offset_bitmap2 = s->offset_dump_bitmap + s->len_dump_bitmap + > old_offset; > - if (write_buffer(s->fd, offset_bitmap2, buf, > + if (write_buffer(s, offset_bitmap2, buf, > bitmap_bufsize) < 0) { > return -1; > } > @@ -1380,7 +1380,7 @@ out: > static void prepare_data_cache(DataCache *data_cache, DumpState *s, > off_t offset) > { > - data_cache->fd = s->fd; > + data_cache->state = s; > data_cache->data_size = 0; > data_cache->buf_size = 4 * dump_bitmap_get_bufsize(s); > data_cache->buf = g_malloc0(data_cache->buf_size); > @@ -1399,11 +1399,11 @@ static int write_cache(DataCache *dc, const void > *buf, size_t size, > /* > * if flag_sync is set, synchronize data in dc->buf into vmcore. > * otherwise check if the space is enough for caching data in buf, if > not, > - * write the data in dc->buf to dc->fd and reset dc->buf > + * write the data in dc->buf to dc->state->fd and reset dc->buf > */ > if ((!flag_sync && dc->data_size + size > dc->buf_size) || > (flag_sync && dc->data_size > 0)) { > - if (write_buffer(dc->fd, dc->offset, dc->buf, dc->data_size) < 0) > { > + if (write_buffer(dc->state, dc->offset, dc->buf, dc->data_size) < > 0) { > return -1; > } > > @@ -1644,7 +1644,7 @@ static void create_kdump_vmcore(DumpState *s, Error > **errp) > * +------------------------------------------+ > */ > > - ret = write_start_flat_header(s->fd); > + ret = write_start_flat_header(s); > if (ret < 0) { > error_setg(errp, "dump: failed to write start flat header"); > return; > @@ -1665,7 +1665,7 @@ static void create_kdump_vmcore(DumpState *s, Error > **errp) > return; > } > > - ret = write_end_flat_header(s->fd); > + ret = write_end_flat_header(s); > if (ret < 0) { > error_setg(errp, "dump: failed to write end flat header"); > return; > diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h > index 7008d43d04..e27af8fb34 100644 > --- a/include/sysemu/dump.h > +++ b/include/sysemu/dump.h > @@ -137,7 +137,7 @@ typedef struct QEMU_PACKED KdumpSubHeader64 { > } KdumpSubHeader64; > > typedef struct DataCache { > - int fd; /* fd of the file where to write the cached data > */ > + DumpState *state; /* dump state related to this data */ > uint8_t *buf; /* buffer for cached data */ > size_t buf_size; /* size of the buf */ > size_t data_size; /* size of cached data in buf */ > -- > 2.39.2 > >
diff --git a/dump/dump.c b/dump/dump.c index 1f1a6edcab..2708ddc135 100644 --- a/dump/dump.c +++ b/dump/dump.c @@ -809,7 +809,7 @@ static void create_vmcore(DumpState *s, Error **errp) dump_end(s, errp); } -static int write_start_flat_header(int fd) +static int write_start_flat_header(DumpState *s) { MakedumpfileHeader *mh; int ret = 0; @@ -824,7 +824,7 @@ static int write_start_flat_header(int fd) mh->version = cpu_to_be64(VERSION_FLAT_HEADER); size_t written_size; - written_size = qemu_write_full(fd, mh, MAX_SIZE_MDF_HEADER); + written_size = qemu_write_full(s->fd, mh, MAX_SIZE_MDF_HEADER); if (written_size != MAX_SIZE_MDF_HEADER) { ret = -1; } @@ -833,7 +833,7 @@ static int write_start_flat_header(int fd) return ret; } -static int write_end_flat_header(int fd) +static int write_end_flat_header(DumpState *s) { MakedumpfileDataHeader mdh; @@ -841,7 +841,7 @@ static int write_end_flat_header(int fd) mdh.buf_size = END_FLAG_FLAT_HEADER; size_t written_size; - written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); + written_size = qemu_write_full(s->fd, &mdh, sizeof(mdh)); if (written_size != sizeof(mdh)) { return -1; } @@ -849,7 +849,7 @@ static int write_end_flat_header(int fd) return 0; } -static int write_buffer(int fd, off_t offset, const void *buf, size_t size) +static int write_buffer(DumpState *s, off_t offset, const void *buf, size_t size) { size_t written_size; MakedumpfileDataHeader mdh; @@ -857,12 +857,12 @@ static int write_buffer(int fd, off_t offset, const void *buf, size_t size) mdh.offset = cpu_to_be64(offset); mdh.buf_size = cpu_to_be64(size); - written_size = qemu_write_full(fd, &mdh, sizeof(mdh)); + written_size = qemu_write_full(s->fd, &mdh, sizeof(mdh)); if (written_size != sizeof(mdh)) { return -1; } - written_size = qemu_write_full(fd, buf, size); + written_size = qemu_write_full(s->fd, buf, size); if (written_size != size) { return -1; } @@ -982,7 +982,7 @@ static void create_header32(DumpState *s, Error **errp) #endif dh->status = cpu_to_dump32(s, status); - if (write_buffer(s->fd, 0, dh, size) < 0) { + if (write_buffer(s, 0, dh, size) < 0) { error_setg(errp, "dump: failed to write disk dump header"); goto out; } @@ -1012,7 +1012,7 @@ static void create_header32(DumpState *s, Error **errp) kh->offset_note = cpu_to_dump64(s, offset_note); kh->note_size = cpu_to_dump32(s, s->note_size); - if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + if (write_buffer(s, DISKDUMP_HEADER_BLOCKS * block_size, kh, size) < 0) { error_setg(errp, "dump: failed to write kdump sub header"); goto out; @@ -1027,7 +1027,7 @@ static void create_header32(DumpState *s, Error **errp) if (*errp) { goto out; } - if (write_buffer(s->fd, offset_note, s->note_buf, + if (write_buffer(s, offset_note, s->note_buf, s->note_size) < 0) { error_setg(errp, "dump: failed to write notes"); goto out; @@ -1093,7 +1093,7 @@ static void create_header64(DumpState *s, Error **errp) #endif dh->status = cpu_to_dump32(s, status); - if (write_buffer(s->fd, 0, dh, size) < 0) { + if (write_buffer(s, 0, dh, size) < 0) { error_setg(errp, "dump: failed to write disk dump header"); goto out; } @@ -1123,7 +1123,7 @@ static void create_header64(DumpState *s, Error **errp) kh->offset_note = cpu_to_dump64(s, offset_note); kh->note_size = cpu_to_dump64(s, s->note_size); - if (write_buffer(s->fd, DISKDUMP_HEADER_BLOCKS * + if (write_buffer(s, DISKDUMP_HEADER_BLOCKS * block_size, kh, size) < 0) { error_setg(errp, "dump: failed to write kdump sub header"); goto out; @@ -1139,7 +1139,7 @@ static void create_header64(DumpState *s, Error **errp) goto out; } - if (write_buffer(s->fd, offset_note, s->note_buf, + if (write_buffer(s, offset_note, s->note_buf, s->note_size) < 0) { error_setg(errp, "dump: failed to write notes"); goto out; @@ -1204,7 +1204,7 @@ static int set_dump_bitmap(uint64_t last_pfn, uint64_t pfn, bool value, while (old_offset < new_offset) { /* calculate the offset and write dump_bitmap */ offset_bitmap1 = s->offset_dump_bitmap + old_offset; - if (write_buffer(s->fd, offset_bitmap1, buf, + if (write_buffer(s, offset_bitmap1, buf, bitmap_bufsize) < 0) { return -1; } @@ -1212,7 +1212,7 @@ static int set_dump_bitmap(uint64_t last_pfn, uint64_t pfn, bool value, /* dump level 1 is chosen, so 1st and 2nd bitmap are same */ offset_bitmap2 = s->offset_dump_bitmap + s->len_dump_bitmap + old_offset; - if (write_buffer(s->fd, offset_bitmap2, buf, + if (write_buffer(s, offset_bitmap2, buf, bitmap_bufsize) < 0) { return -1; } @@ -1380,7 +1380,7 @@ out: static void prepare_data_cache(DataCache *data_cache, DumpState *s, off_t offset) { - data_cache->fd = s->fd; + data_cache->state = s; data_cache->data_size = 0; data_cache->buf_size = 4 * dump_bitmap_get_bufsize(s); data_cache->buf = g_malloc0(data_cache->buf_size); @@ -1399,11 +1399,11 @@ static int write_cache(DataCache *dc, const void *buf, size_t size, /* * if flag_sync is set, synchronize data in dc->buf into vmcore. * otherwise check if the space is enough for caching data in buf, if not, - * write the data in dc->buf to dc->fd and reset dc->buf + * write the data in dc->buf to dc->state->fd and reset dc->buf */ if ((!flag_sync && dc->data_size + size > dc->buf_size) || (flag_sync && dc->data_size > 0)) { - if (write_buffer(dc->fd, dc->offset, dc->buf, dc->data_size) < 0) { + if (write_buffer(dc->state, dc->offset, dc->buf, dc->data_size) < 0) { return -1; } @@ -1644,7 +1644,7 @@ static void create_kdump_vmcore(DumpState *s, Error **errp) * +------------------------------------------+ */ - ret = write_start_flat_header(s->fd); + ret = write_start_flat_header(s); if (ret < 0) { error_setg(errp, "dump: failed to write start flat header"); return; @@ -1665,7 +1665,7 @@ static void create_kdump_vmcore(DumpState *s, Error **errp) return; } - ret = write_end_flat_header(s->fd); + ret = write_end_flat_header(s); if (ret < 0) { error_setg(errp, "dump: failed to write end flat header"); return; diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h index 7008d43d04..e27af8fb34 100644 --- a/include/sysemu/dump.h +++ b/include/sysemu/dump.h @@ -137,7 +137,7 @@ typedef struct QEMU_PACKED KdumpSubHeader64 { } KdumpSubHeader64; typedef struct DataCache { - int fd; /* fd of the file where to write the cached data */ + DumpState *state; /* dump state related to this data */ uint8_t *buf; /* buffer for cached data */ size_t buf_size; /* size of the buf */ size_t data_size; /* size of cached data in buf */
For the next patch, we need a reference to DumpState when writing data. Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com> --- dump/dump.c | 40 ++++++++++++++++++++-------------------- include/sysemu/dump.h | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-)