aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2012-05-04 10:26:56 -0400
committerDavid S. Miller <davem@davemloft.net>2012-05-06 13:13:19 -0400
commitec47ea82477404631d49b8e568c71826c9b663ac (patch)
tree8b7890f23ad078d9eccbd4571e0b2da86b04a6a0 /net/core
parent3e24591a19bbda6fcb2cbe383b41b4ba794501bf (diff)
skb: Add inline helper for getting the skb end offset from head
With the recent changes for how we compute the skb truesize it occurs to me we are probably going to have a lot of calls to skb_end_pointer - skb->head. Instead of running all over the place doing that it would make more sense to just make it a separate inline skb_end_offset(skb) that way we can return the correct value without having gcc having to do all the optimization to cancel out skb->head - skb->head. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/skbuff.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 17e4b1e1bf2c..2c35da818ef9 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -829,7 +829,7 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
829struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask) 829struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask)
830{ 830{
831 int headerlen = skb_headroom(skb); 831 int headerlen = skb_headroom(skb);
832 unsigned int size = (skb_end_pointer(skb) - skb->head) + skb->data_len; 832 unsigned int size = skb_end_offset(skb) + skb->data_len;
833 struct sk_buff *n = alloc_skb(size, gfp_mask); 833 struct sk_buff *n = alloc_skb(size, gfp_mask);
834 834
835 if (!n) 835 if (!n)
@@ -930,7 +930,7 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
930{ 930{
931 int i; 931 int i;
932 u8 *data; 932 u8 *data;
933 int size = nhead + (skb_end_pointer(skb) - skb->head) + ntail; 933 int size = nhead + skb_end_offset(skb) + ntail;
934 long off; 934 long off;
935 935
936 BUG_ON(nhead < 0); 936 BUG_ON(nhead < 0);
@@ -2727,14 +2727,13 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
2727 if (unlikely(!nskb)) 2727 if (unlikely(!nskb))
2728 goto err; 2728 goto err;
2729 2729
2730 hsize = skb_end_pointer(nskb) - nskb->head; 2730 hsize = skb_end_offset(nskb);
2731 if (skb_cow_head(nskb, doffset + headroom)) { 2731 if (skb_cow_head(nskb, doffset + headroom)) {
2732 kfree_skb(nskb); 2732 kfree_skb(nskb);
2733 goto err; 2733 goto err;
2734 } 2734 }
2735 2735
2736 nskb->truesize += skb_end_pointer(nskb) - nskb->head - 2736 nskb->truesize += skb_end_offset(nskb) - hsize;
2737 hsize;
2738 skb_release_head_state(nskb); 2737 skb_release_head_state(nskb);
2739 __skb_push(nskb, doffset); 2738 __skb_push(nskb, doffset);
2740 } else { 2739 } else {
@@ -2883,7 +2882,8 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)
2883 skb_frag_size_sub(frag, offset); 2882 skb_frag_size_sub(frag, offset);
2884 2883
2885 /* all fragments truesize : remove (head size + sk_buff) */ 2884 /* all fragments truesize : remove (head size + sk_buff) */
2886 delta_truesize = skb->truesize - SKB_TRUESIZE(skb_end_pointer(skb) - skb->head); 2885 delta_truesize = skb->truesize -
2886 SKB_TRUESIZE(skb_end_offset(skb));
2887 2887
2888 skb->truesize -= skb->data_len; 2888 skb->truesize -= skb->data_len;
2889 skb->len -= skb->data_len; 2889 skb->len -= skb->data_len;