udp6: shuffle up->pending AF_INET bits
authorPavel Begunkov <asml.silence@gmail.com>
Thu, 27 Jan 2022 00:36:23 +0000 (00:36 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 28 Jan 2022 03:46:10 +0000 (19:46 -0800)
Corked AF_INET for ipv6 socket doesn't appear to be the hottest case,
so move it out of the common path under up->pending check to remove
overhead.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/udp.c

index 528b81e..e221a69 100644 (file)
@@ -1363,9 +1363,6 @@ do_udp_sendmsg:
                }
        }
 
-       if (up->pending == AF_INET)
-               return udp_sendmsg(sk, msg, len);
-
        /* Rough check on arithmetic overflow,
           better check is made in ip6_append_data().
           */
@@ -1374,6 +1371,8 @@ do_udp_sendmsg:
 
        getfrag  =  is_udplite ?  udplite_getfrag : ip_generic_getfrag;
        if (up->pending) {
+               if (up->pending == AF_INET)
+                       return udp_sendmsg(sk, msg, len);
                /*
                 * There are pending frames.
                 * The socket lock must be held while it's corked.