net: pack skb_shared_info more efficiently
Ian Campbell [Thu, 5 Jan 2012 07:13:39 +0000 (07:13 +0000)]
nr_frags can be 8 bits since 256 is plenty of fragments. This allows it to be
packed with tx_flags.

Also by moving ip6_frag_id and dataref (both 4 bytes) next to each other we can
avoid a hole between ip6_frag_id and frag_list on 64 bit systems.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

include/linux/skbuff.h

index f47f0c3..50db9b0 100644 (file)
@@ -242,15 +242,15 @@ struct ubuf_info {
  * the end of the header data, ie. at skb->end.
  */
 struct skb_shared_info {
-       unsigned short  nr_frags;
+       unsigned char   nr_frags;
+       __u8            tx_flags;
        unsigned short  gso_size;
        /* Warning: this field is not always filled in (UFO)! */
        unsigned short  gso_segs;
        unsigned short  gso_type;
-       __be32          ip6_frag_id;
-       __u8            tx_flags;
        struct sk_buff  *frag_list;
        struct skb_shared_hwtstamps hwtstamps;
+       __be32          ip6_frag_id;
 
        /*
         * Warning : all fields before dataref are cleared in __alloc_skb()