Stefano Garzarella
2023-Oct-09 15:16 UTC
[PATCH net-next v3 02/12] vsock: read from socket's error queue
On Sat, Oct 07, 2023 at 08:21:29PM +0300, Arseniy Krasnov wrote:>This adds handling of MSG_ERRQUEUE input flag in receive call. This flag >is used to read socket's error queue instead of data queue. Possible >scenario of error queue usage is receiving completions for transmission >with MSG_ZEROCOPY flag. This patch also adds new defines: 'SOL_VSOCK' >and 'VSOCK_RECVERR'. > >Signed-off-by: Arseniy Krasnov <avkrasnov at salutedevices.com> >--- > Changelog: > v1 -> v2: > * Place new defines for userspace to the existing file 'vm_sockets.h' > instead of creating new one. > v2 -> v3: > * Add comments to describe 'SOL_VSOCK' and 'VSOCK_RECVERR' in the file > 'vm_sockets.h'. > * Reorder includes in 'af_vsock.c' in alphabetical order. > > include/linux/socket.h | 1 + > include/uapi/linux/vm_sockets.h | 12 ++++++++++++ > net/vmw_vsock/af_vsock.c | 6 ++++++ > 3 files changed, 19 insertions(+) > >diff --git a/include/linux/socket.h b/include/linux/socket.h >index 39b74d83c7c4..cfcb7e2c3813 100644 >--- a/include/linux/socket.h >+++ b/include/linux/socket.h >@@ -383,6 +383,7 @@ struct ucred { > #define SOL_MPTCP 284 > #define SOL_MCTP 285 > #define SOL_SMC 286 >+#define SOL_VSOCK 287 > > /* IPX options */ > #define IPX_TYPE 1 >diff --git a/include/uapi/linux/vm_sockets.h b/include/uapi/linux/vm_sockets.h >index c60ca33eac59..d9d703b2d45a 100644 >--- a/include/uapi/linux/vm_sockets.h >+++ b/include/uapi/linux/vm_sockets.h >@@ -191,4 +191,16 @@ struct sockaddr_vm { > > #define IOCTL_VM_SOCKETS_GET_LOCAL_CID _IO(7, 0xb9) > >+/* For reading completion in case of MSG_ZEROCOPY flag transmission. >+ * This is value of 'cmsg_level' field of the 'struct cmsghdr'. >+ */ >+ >+#define SOL_VSOCK 287 >+ >+/* For reading completion in case of MSG_ZEROCOPY flag transmission. >+ * This is value of 'cmsg_type' field of the 'struct cmsghdr'. >+ */ >+ >+#define VSOCK_RECVERR 1I would suggest a bit more context here, something like this: diff --git a/include/uapi/linux/vm_sockets.h b/include/uapi/linux/vm_sockets.h index d9d703b2d45a..ed07181d4eff 100644 --- a/include/uapi/linux/vm_sockets.h +++ b/include/uapi/linux/vm_sockets.h @@ -191,14 +191,19 @@ struct sockaddr_vm { #define IOCTL_VM_SOCKETS_GET_LOCAL_CID _IO(7, 0xb9) -/* For reading completion in case of MSG_ZEROCOPY flag transmission. - * This is value of 'cmsg_level' field of the 'struct cmsghdr'. +/* MSG_ZEROCOPY notifications are encoded in the standard error format, + * sock_extended_err. See Documentation/networking/msg_zerocopy.rst in + * kernel source tree for more details. + */ + +/* 'cmsg_level' field value of 'struct cmsghdr' for notification parsing + * when MSG_ZEROCOPY flag is used on transmissions. */ #define SOL_VSOCK 287 -/* For reading completion in case of MSG_ZEROCOPY flag transmission. - * This is value of 'cmsg_type' field of the 'struct cmsghdr'. +/* 'cmsg_type' field value of 'struct cmsghdr' for notification parsing + * when MSG_ZEROCOPY flag is used on transmissions. */ #define VSOCK_RECVERR 1 The rest LGTM. Stefano>+ > #endif /* _UAPI_VM_SOCKETS_H */ >diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c >index d841f4de33b0..38486efd3d05 100644 >--- a/net/vmw_vsock/af_vsock.c >+++ b/net/vmw_vsock/af_vsock.c >@@ -89,6 +89,7 @@ > #include <linux/types.h> > #include <linux/bitops.h> > #include <linux/cred.h> >+#include <linux/errqueue.h> > #include <linux/init.h> > #include <linux/io.h> > #include <linux/kernel.h> >@@ -110,6 +111,7 @@ > #include <linux/workqueue.h> > #include <net/sock.h> > #include <net/af_vsock.h> >+#include <uapi/linux/vm_sockets.h> > > static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr); > static void vsock_sk_destruct(struct sock *sk); >@@ -2137,6 +2139,10 @@ vsock_connectible_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, > int err; > > sk = sock->sk; >+ >+ if (unlikely(flags & MSG_ERRQUEUE)) >+ return sock_recv_errqueue(sk, msg, len, SOL_VSOCK, VSOCK_RECVERR); >+ > vsk = vsock_sk(sk); > err = 0; > >-- >2.25.1 >