On Fri, Oct 28, 2022 at 01:39:09PM +0300, Nikolay Borisov wrote: > Restoring a 'fixed-ram' enabled migration stream would require reading > from specific offsets in the file so add a helper to QEMUFile that uses > the newly introduced qio_channel_file_preadv. > > Signed-off-by: Nikolay Borisov <nbori...@suse.com> > --- > migration/qemu-file.c | 23 +++++++++++++++++++++++ > migration/qemu-file.h | 1 + > 2 files changed, 24 insertions(+) > > diff --git a/migration/qemu-file.c b/migration/qemu-file.c > index d0e0ba6150f7..b24972d5728d 100644 > --- a/migration/qemu-file.c > +++ b/migration/qemu-file.c > @@ -564,6 +564,29 @@ void qemu_put_buffer_at(QEMUFile *f, const uint8_t *buf, > size_t buflen, off_t po > return; > } > > + > +size_t qemu_get_buffer_at(QEMUFile *f, const uint8_t *buf, size_t buflen, > off_t pos) > +{ > + Error *err = NULL; > + struct iovec iov = { .iov_base = (char *)buf, .iov_len = buflen }; > + ssize_t ret; > + > + if (f->last_error) { > + return 0; > + } > + > + ret = qio_channel_io_preadv(f->ioc, &iov, 1, pos, &err);
If we have a qio_channel_io_preadv that does NOT use iovecs, then this code gets simpler, as the iovec wrapping can be hidden in the QIOChannel code. > + if (ret == -1) { > + goto error; > + } > + > + return (size_t)ret; > + > + error: > + qemu_file_set_error_obj(f, -EIO, err); > + return 0; > +} > + > void qemu_set_offset(QEMUFile *f, off_t off, int whence) > { > Error *err = NULL; > diff --git a/migration/qemu-file.h b/migration/qemu-file.h > index 33cfc07b81d1..ab10c3ad7e42 100644 > --- a/migration/qemu-file.h > +++ b/migration/qemu-file.h > @@ -151,6 +151,7 @@ void qemu_file_set_blocking(QEMUFile *f, bool block); > void qemu_set_offset(QEMUFile *f, off_t off, int whence); > off_t qemu_get_offset(QEMUFile *f); > void qemu_put_buffer_at(QEMUFile *f, const uint8_t *buf, size_t buflen, > off_t pos); > +size_t qemu_get_buffer_at(QEMUFile *f, const uint8_t *buf, size_t buflen, > off_t pos); > > void ram_control_before_iterate(QEMUFile *f, uint64_t flags); > void ram_control_after_iterate(QEMUFile *f, uint64_t flags); > -- > 2.34.1 > With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|