ipv6: don't zero inet_cork_full::fl after use
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>
This commit is contained in:
parent
d656b2ea5f
commit
940ea00b06
@ -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,
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user