On Thu, Jan 06, 2022 at 07:13:38PM -0300, Leonardo Bras wrote: > diff --git a/io/channel.c b/io/channel.c > index e8b019dc36..904855e16e 100644 > --- a/io/channel.c > +++ b/io/channel.c > @@ -67,12 +67,13 @@ ssize_t qio_channel_readv_full(QIOChannel *ioc, > } > > > -ssize_t qio_channel_writev_full(QIOChannel *ioc, > - const struct iovec *iov, > - size_t niov, > - int *fds, > - size_t nfds, > - Error **errp) > +ssize_t qio_channel_writev_full_flags(QIOChannel *ioc, > + const struct iovec *iov, > + size_t niov, > + int *fds, > + size_t nfds, > + int flags, > + Error **errp) > { > QIOChannelClass *klass = QIO_CHANNEL_GET_CLASS(ioc); > > @@ -83,7 +84,7 @@ ssize_t qio_channel_writev_full(QIOChannel *ioc, > return -1; > }
Should we better also check QIO_CHANNEL_FEATURE_WRITE_ZERO_COPY here when QIO_CHANNEL_WRITE_FLAG_ZERO_COPY is set? Just like what we do with: if ((fds || nfds) && !qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_FD_PASS)) { error_setg_errno(errp, EINVAL, "Channel does not support file descriptor passing"); return -1; } I still think it's better to have the caller be crystal clear when to use zero_copy feature because it has implication on buffer lifetime. I might have commented similar things before, but I have missed a few versions so I could also have missed some previous discussions.. > > - return klass->io_writev(ioc, iov, niov, fds, nfds, errp); > + return klass->io_writev(ioc, iov, niov, fds, nfds, flags, errp); > } -- Peter Xu