[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 2/3] QIOChannelSocket: Implement io_writev_zerocopy & io_f
From: |
Peter Xu |
Subject: |
Re: [PATCH v4 2/3] QIOChannelSocket: Implement io_writev_zerocopy & io_flush_zerocopy for CONFIG_LINUX |
Date: |
Wed, 13 Oct 2021 14:18:12 +0800 |
On Sat, Oct 09, 2021 at 04:56:12AM -0300, Leonardo Bras wrote:
> @@ -154,6 +161,17 @@ int qio_channel_socket_connect_sync(QIOChannelSocket
> *ioc,
> return -1;
> }
>
> +#ifdef CONFIG_LINUX
> + ret = qemu_setsockopt(fd, SOL_SOCKET, SO_ZEROCOPY, &v, sizeof(v));
> + if (ret < 0) {
> + /* Zerocopy not available on host */
> + return 0;
> + }
> +
> + qio_channel_set_feature(QIO_CHANNEL(ioc),
> + QIO_CHANNEL_FEATURE_WRITE_ZEROCOPY);
This is okay I think, but looks a bit weird. Maybe nicer to be written as:
#if LINUX
ret = setsockopt();
if (ret == 0) {
qio_channel_set_feature(...);
}
#endif
return 0;
?
> +#endif
> +
> return 0;
> }
[...]
> +static ssize_t qio_channel_socket_writev_zerocopy(QIOChannel *ioc,
> + const struct iovec *iov,
> + size_t niov,
> + Error **errp)
> +{
> + QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
> + ssize_t ret;
> +
> + ret = qio_channel_socket_writev_flags(ioc, iov, niov, NULL, 0,
> + MSG_ZEROCOPY, errp);
> + if (ret == QIO_CHANNEL_ERR_NOBUFS) {
> + if (errp && *errp) {
Hmm this seems wrong, *errp should be NULL in most cases, meanwhile I think
error_setg*() takes care of errp==NULL too, so maybe we can drop this?
> + error_setg_errno(errp, errno,
> + "Process can't lock enough memory for using
> MSG_ZEROCOPY");
> + }
> + return -1;
> + }
> +
> + sioc->zerocopy_queued++;
> + return ret;
> +}
--
Peter Xu
- Re: [PATCH v4 1/3] QIOChannel: Add io_writev_zerocopy & io_flush_zerocopy callbacks, (continued)
Re: [PATCH v4 1/3] QIOChannel: Add io_writev_zerocopy & io_flush_zerocopy callbacks, Peter Xu, 2021/10/13
[PATCH v4 2/3] QIOChannelSocket: Implement io_writev_zerocopy & io_flush_zerocopy for CONFIG_LINUX, Leonardo Bras, 2021/10/09
[PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras, 2021/10/09
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Eric Blake, 2021/10/11
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras Soares Passos, 2021/10/11
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Markus Armbruster, 2021/10/12
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras Soares Passos, 2021/10/27
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Markus Armbruster, 2021/10/28
- Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Leonardo Bras Soares Passos, 2021/10/28
Re: [PATCH v4 3/3] multifd: Implement zerocopy write in multifd migration (multifd-zerocopy), Peter Xu, 2021/10/13