ipv6: don't zero inet_cork_full::fl after use
authorPavel Begunkov <asml.silence@gmail.com>
Thu, 27 Jan 2022 00:36:26 +0000 (00:36 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 28 Jan 2022 03:46:11 +0000 (19:46 -0800)
It doesn't appear there is any reason for ip6_cork_release() to zero
cork->fl, it'll be fully filled on next initialisation. This 88 bytes
memset accounts to 0.3-0.5% of total CPU cycles.
It's also needed in following patches and allows to remove an extar flow
copy in udp_v6_push_pending_frames().

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/ip6_output.c
net/ipv6/udp.c

index 88349e4..b8fdda9 100644 (file)
@@ -1831,7 +1831,6 @@ static void ip6_cork_release(struct inet_cork_full *cork,
                cork->base.dst = NULL;
                cork->base.flags &= ~IPCORK_ALLFRAG;
        }
-       memset(&cork->fl, 0, sizeof(cork->fl));
 }
 
 struct sk_buff *__ip6_make_skb(struct sock *sk,
index e221a69..3af1eea 100644 (file)
@@ -1266,23 +1266,17 @@ static int udp_v6_push_pending_frames(struct sock *sk)
 {
        struct sk_buff *skb;
        struct udp_sock  *up = udp_sk(sk);
-       struct flowi6 fl6;
        int err = 0;
 
        if (up->pending == AF_INET)
                return udp_push_pending_frames(sk);
 
-       /* ip6_finish_skb will release the cork, so make a copy of
-        * fl6 here.
-        */
-       fl6 = inet_sk(sk)->cork.fl.u.ip6;
-
        skb = ip6_finish_skb(sk);
        if (!skb)
                goto out;
 
-       err = udp_v6_send_skb(skb, &fl6, &inet_sk(sk)->cork.base);
-
+       err = udp_v6_send_skb(skb, &inet_sk(sk)->cork.fl.u.ip6,
+                             &inet_sk(sk)->cork.base);
 out:
        up->len = 0;
        up->pending = 0;