From: Eric Dumazet Date: Wed, 10 Oct 2018 19:30:05 +0000 (-0700) Subject: inet: frags: get rid of ipfrag_skb_cb/FRAG_CB X-Git-Tag: v4.9.134~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=316986fe4dcac011b4f85d9bbef1edf4953c0219;p=platform%2Fkernel%2Flinux-amlogic.git inet: frags: get rid of ipfrag_skb_cb/FRAG_CB ip_defrag uses skb->cb[] to store the fragment offset, and unfortunately this integer is currently in a different cache line than skb->next, meaning that we use two cache lines per skb when finding the insertion point. By aliasing skb->ip_defrag_offset and skb->dev, we pack all the fields in a single cache line and save precious memory bandwidth. Note that after the fast path added by Changli Gao in commit d6bebca92c66 ("fragment: add fast path for in-order fragments") this change wont help the fast path, since we still need to access prev->len (2nd cache line), but will show great benefits when slow path is entered, since we perform a linear scan of a potentially long list. Also, note that this potential long list is an attack vector, we might consider also using an rb-tree there eventually. Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller (cherry picked from commit bf66337140c64c27fa37222b7abca7e49d63fb57) Signed-off-by: Greg Kroah-Hartman --- diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 1f207dd22757..c7cca35fcf6d 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -645,6 +645,11 @@ struct sk_buff { }; struct rb_node rbnode; /* used in netem & tcp stack */ }; + + union { + int ip_defrag_offset; + }; + struct sock *sk; struct net_device *dev;