net/tcp: don't peek at tail for io_uring zc
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 15 May 2023 16:06:36 +0000 (17:06 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 May 2023 07:37:54 +0000 (08:37 +0100)
Move tcp_write_queue_tail() to SOCK_ZEROCOPY specific flag as zerocopy
setup for msghdr->ubuf_info doesn't need to peek into the last request.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp.c

index 4d6392c..40f591f 100644 (file)
@@ -1229,13 +1229,12 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
        flags = msg->msg_flags;
 
        if ((flags & MSG_ZEROCOPY) && size) {
-               skb = tcp_write_queue_tail(sk);
-
                if (msg->msg_ubuf) {
                        uarg = msg->msg_ubuf;
                        net_zcopy_get(uarg);
                        zc = sk->sk_route_caps & NETIF_F_SG;
                } else if (sock_flag(sk, SOCK_ZEROCOPY)) {
+                       skb = tcp_write_queue_tail(sk);
                        uarg = msg_zerocopy_realloc(sk, size, skb_zcopy(skb));
                        if (!uarg) {
                                err = -ENOBUFS;