diff options
author | Leonardo Bras | 2022-05-13 08:28:31 +0200 |
---|---|---|
committer | Dr. David Alan Gilbert | 2022-05-16 14:56:24 +0200 |
commit | b88651cb4d4fa416fdbb6afaf5b26ec8c035eaad (patch) | |
tree | b165c469c48c11c9c2dfcf5a05d27c75ad4dc4a6 /chardev/char-io.c | |
parent | meson.build: Fix docker-test-build@alpine when including linux/errqueue.h (diff) | |
download | qemu-b88651cb4d4fa416fdbb6afaf5b26ec8c035eaad.tar.gz qemu-b88651cb4d4fa416fdbb6afaf5b26ec8c035eaad.tar.xz qemu-b88651cb4d4fa416fdbb6afaf5b26ec8c035eaad.zip |
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>
Diffstat (limited to 'chardev/char-io.c')
-rw-r--r-- | chardev/char-io.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/chardev/char-io.c b/chardev/char-io.c index 8ced184160..4451128cba 100644 --- a/chardev/char-io.c +++ b/chardev/char-io.c @@ -122,7 +122,7 @@ int io_channel_send_full(QIOChannel *ioc, ret = qio_channel_writev_full( ioc, &iov, 1, - fds, nfds, NULL); + fds, nfds, 0, NULL); if (ret == QIO_CHANNEL_ERR_BLOCK) { if (offset) { return offset; |