Hi On Tue, Nov 7, 2023 at 6:22 PM Janosch Frank <fran...@linux.ibm.com> wrote: > > PV dumps block vcpu runs until dump end is reached. If there's an > error between PV dump init and PV dump end the vm will never be able > to run again. One example of such an error is insufficient disk space > for the dump file. > > Let's add a cleanup function that tries to do a dump end. The dump > completion data is discarded but there's no point in writing it to a > file anyway if there's a possibility that other PV dump data is > missing. > > Signed-off-by: Janosch Frank <fran...@linux.ibm.com> > --- > target/s390x/arch_dump.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c > index bdb0bfa0e7..70146d7e84 100644 > --- a/target/s390x/arch_dump.c > +++ b/target/s390x/arch_dump.c > @@ -433,6 +433,22 @@ static int arch_sections_write(DumpState *s, uint8_t > *buff) > return 0; > } > > +static void arch_cleanup(DumpState *s) > +{ > + uint8_t *buff = g_malloc(kvm_s390_pv_dmp_get_size_completion_data()); > + int rc; > + > + if (!pv_dump_initialized || !buff) {
this may leak if bluff != NULL && !pv_dump_initialized Better use g_autofree. No need to check bluff != NULL. (g_malloc abort() if it failed) > + return; > + } > + > + rc = kvm_s390_dump_completion_data(buff); > + if (!rc) { > + pv_dump_initialized = false; > + } > + g_free(buff); > +} > + > int cpu_get_dump_info(ArchDumpInfo *info, > const struct GuestPhysBlockList *guest_phys_blocks) > { > @@ -448,6 +464,7 @@ int cpu_get_dump_info(ArchDumpInfo *info, > info->arch_sections_add_fn = *arch_sections_add; > info->arch_sections_write_hdr_fn = *arch_sections_write_hdr; > info->arch_sections_write_fn = *arch_sections_write; > + info->arch_cleanup_fn = *arch_cleanup; > } > return 0; > } > -- > 2.34.1 > > otherwise, seems ok -- Marc-André Lureau