On Fri, Mar 17, 2023 at 06:50:17PM +0100, Hanna Czenczek wrote: > When processing vectored guest requests that are not aligned to the > storage request alignment, we pad them by adding head and/or tail > buffers for a read-modify-write cycle. >
> > To do this, the use of qemu_iovec_init_extended() in bdrv_pad_request() > is effectively replaced by the new function bdrv_create_padded_qiov(), > which not only wraps the request IOV with padding head/tail, but also > ensures that the resulting vector will not have more than IOV_MAX > elements. Putting that functionality into qemu_iovec_init_extended() is > infeasible because it requires allocating a bounce buffer; doing so > would require many more parameters (buffer alignment, how to initialize > the buffer, and out parameters like the buffer, its length, and the > original elements), which is not reasonable. > > Conversely, it is not difficult to move qemu_iovec_init_extended()'s > functionality into bdrv_create_padded_qiov() by using public > qemu_iovec_* functions, so that is what this patch does. > > Because bdrv_pad_request() was the only "serious" user of > qemu_iovec_init_extended(), the next patch will remove the latter > function, so the functionality is not implemented twice. > > Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2141964 > Signed-off-by: Hanna Czenczek <hre...@redhat.com> > --- > block/io.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 143 insertions(+), 10 deletions(-) Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org