]> git.proxmox.com Git - mirror_qemu.git/commit
QIOChannel: Add flags on io_writev and introduce io_flush callback
authorLeonardo Bras <leobras@redhat.com>
Fri, 13 May 2022 06:28:31 +0000 (03:28 -0300)
committerDr. David Alan Gilbert <dgilbert@redhat.com>
Mon, 16 May 2022 12:56:24 +0000 (13:56 +0100)
commitb88651cb4d4fa416fdbb6afaf5b26ec8c035eaad
treeb165c469c48c11c9c2dfcf5a05d27c75ad4dc4a6
parent354081d43de44ebd3497fe08f7f0121a5517d528
QIOChannel: Add flags on io_writev and introduce io_flush callback

Add flags to io_writev and introduce io_flush as optional callback to
QIOChannelClass, allowing the implementation of zero copy writes by
subclasses.

How to use them:
- Write data using qio_channel_writev*(...,QIO_CHANNEL_WRITE_FLAG_ZERO_COPY),
- Wait write completion with qio_channel_flush().

Notes:
As some zero copy write implementations work asynchronously, it's
recommended to keep the write buffer untouched until the return of
qio_channel_flush(), to avoid the risk of sending an updated buffer
instead of the buffer state during write.

As io_flush callback is optional, if a subclass does not implement it, then:
- io_flush will return 0 without changing anything.

Also, some functions like qio_channel_writev_full_all() were adapted to
receive a flag parameter. That allows shared code between zero copy and
non-zero copy writev, and also an easier implementation on new flags.

Signed-off-by: Leonardo Bras <leobras@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Message-Id: <20220513062836.965425-3-leobras@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
13 files changed:
chardev/char-io.c
hw/remote/mpqemu-link.c
include/io/channel.h
io/channel-buffer.c
io/channel-command.c
io/channel-file.c
io/channel-socket.c
io/channel-tls.c
io/channel-websock.c
io/channel.c
migration/rdma.c
scsi/pr-manager-helper.c
tests/unit/test-io-channel-socket.c