]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: flag sockets supporting msghdr originated zerocopy
authorPavel Begunkov <asml.silence@gmail.com>
Fri, 21 Oct 2022 10:16:39 +0000 (11:16 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 26 Oct 2022 10:22:56 +0000 (12:22 +0200)
commit e993ffe3da4bcddea0536b03be1031bf35cd8d85 upstream.

We need an efficient way in io_uring to check whether a socket supports
zerocopy with msghdr provided ubuf_info. Add a new flag into the struct
socket flags fields.

Cc: <stable@vger.kernel.org> # 6.0
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/r/3dafafab822b1c66308bb58a0ac738b1e3f53f74.1666346426.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/net.h
net/ipv4/tcp.c
net/ipv4/udp.c

index 711c3593c3b8d34513f80d7cdb42b5ce6e8f3c7e..18d942bbdf6e0977f4efe20e0ce17e4092910bd0 100644 (file)
@@ -41,6 +41,7 @@ struct net;
 #define SOCK_NOSPACE           2
 #define SOCK_PASSCRED          3
 #define SOCK_PASSSEC           4
+#define SOCK_SUPPORT_ZC                5
 
 #ifndef ARCH_HAS_SOCKET_TYPES
 /**
index 5f1d84d901c71d984a2909f6295b5556f0deb968..5fbd0a5b48f7ef805619a30b6cfb988fa158df82 100644 (file)
@@ -457,6 +457,7 @@ void tcp_init_sock(struct sock *sk)
        WRITE_ONCE(sk->sk_sndbuf, READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[1]));
        WRITE_ONCE(sk->sk_rcvbuf, READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_rmem[1]));
 
+       set_bit(SOCK_SUPPORT_ZC, &sk->sk_socket->flags);
        sk_sockets_allocated_inc(sk);
 }
 EXPORT_SYMBOL(tcp_init_sock);
index 560d9eadeaa5805e4eeb416ff3b07a36bd746223..516b11c136daf07d7ef262d06475f3855fbc5100 100644 (file)
@@ -1620,6 +1620,7 @@ int udp_init_sock(struct sock *sk)
 {
        skb_queue_head_init(&udp_sk(sk)->reader_queue);
        sk->sk_destruct = udp_destruct_sock;
+       set_bit(SOCK_SUPPORT_ZC, &sk->sk_socket->flags);
        return 0;
 }
 EXPORT_SYMBOL_GPL(udp_init_sock);