On Thu, Jan 06, 2022 at 07:13:39PM -0300, Leonardo Bras wrote: > @@ -558,15 +575,26 @@ static ssize_t qio_channel_socket_writev(QIOChannel > *ioc, > memcpy(CMSG_DATA(cmsg), fds, fdsize); > } > > + if (flags & QIO_CHANNEL_WRITE_FLAG_ZERO_COPY) { > + sflags = MSG_ZEROCOPY; > + } > + > retry: > - ret = sendmsg(sioc->fd, &msg, 0); > + ret = sendmsg(sioc->fd, &msg, sflags); > if (ret <= 0) { > - if (errno == EAGAIN) { > + switch (errno) { > + case EAGAIN: > return QIO_CHANNEL_ERR_BLOCK; > - } > - if (errno == EINTR) { > + case EINTR: > goto retry; > + case ENOBUFS: > + if (sflags & MSG_ZEROCOPY) { > + error_setg_errno(errp, errno, > + "Process can't lock enough memory for using > MSG_ZEROCOPY"); > + return -1; > + }
I have no idea whether it'll make a real differnece, but - should we better add a "break" here? If you agree and with that fixed, feel free to add: Reviewed-by: Peter Xu <pet...@redhat.com> I also wonder whether you hit ENOBUFS in any of the environments. On Fedora here it's by default unlimited, but just curious when we should keep an eye. Thanks, -- Peter Xu