diff options
author | Peter Pan(潘卫平) <panweiping3@gmail.com> | 2013-06-06 09:27:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-11 05:48:06 -0400 |
commit | b41abb42bf62a85a32c41dab873220598a6ee266 (patch) | |
tree | b8a06a060ee2c5d980e7bd4019969673d85e7c28 /net/core | |
parent | da12c90e099789a63073fc82a19542ce54d4efb9 (diff) |
net: pass correct parameter to skb_headers_offset_update()
Since commit 1a37e412a022(net: Use 16bits for *_headers fields of struct
skbuff), skb->*_header are relative to skb->head,
so copy_skb_header() should not call skb_headers_offset_update() now,
and we should pass correct parameter to skb_headers_offset_update() in
pskb_expand_head() and skb_copy_expand().
Signed-off-by: Weiping Pan <panweiping3@gmail.com>
Reviewed-by: Simon Horman <horms@verge.net.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/skbuff.c | 15 |
1 files changed, 2 insertions, 13 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 4a4181e16c1a..edf37578e21e 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -909,18 +909,8 @@ static void skb_headers_offset_update(struct sk_buff *skb, int off) | |||
909 | 909 | ||
910 | static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old) | 910 | static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old) |
911 | { | 911 | { |
912 | #ifndef NET_SKBUFF_DATA_USES_OFFSET | ||
913 | /* | ||
914 | * Shift between the two data areas in bytes | ||
915 | */ | ||
916 | unsigned long offset = new->data - old->data; | ||
917 | #endif | ||
918 | |||
919 | __copy_skb_header(new, old); | 912 | __copy_skb_header(new, old); |
920 | 913 | ||
921 | #ifndef NET_SKBUFF_DATA_USES_OFFSET | ||
922 | skb_headers_offset_update(new, offset); | ||
923 | #endif | ||
924 | skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size; | 914 | skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size; |
925 | skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs; | 915 | skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs; |
926 | skb_shinfo(new)->gso_type = skb_shinfo(old)->gso_type; | 916 | skb_shinfo(new)->gso_type = skb_shinfo(old)->gso_type; |
@@ -1112,7 +1102,7 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail, | |||
1112 | skb->end = skb->head + size; | 1102 | skb->end = skb->head + size; |
1113 | #endif | 1103 | #endif |
1114 | skb->tail += off; | 1104 | skb->tail += off; |
1115 | skb_headers_offset_update(skb, off); | 1105 | skb_headers_offset_update(skb, nhead); |
1116 | /* Only adjust this if it actually is csum_start rather than csum */ | 1106 | /* Only adjust this if it actually is csum_start rather than csum */ |
1117 | if (skb->ip_summed == CHECKSUM_PARTIAL) | 1107 | if (skb->ip_summed == CHECKSUM_PARTIAL) |
1118 | skb->csum_start += nhead; | 1108 | skb->csum_start += nhead; |
@@ -1207,9 +1197,8 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb, | |||
1207 | off = newheadroom - oldheadroom; | 1197 | off = newheadroom - oldheadroom; |
1208 | if (n->ip_summed == CHECKSUM_PARTIAL) | 1198 | if (n->ip_summed == CHECKSUM_PARTIAL) |
1209 | n->csum_start += off; | 1199 | n->csum_start += off; |
1210 | #ifdef NET_SKBUFF_DATA_USES_OFFSET | 1200 | |
1211 | skb_headers_offset_update(n, off); | 1201 | skb_headers_offset_update(n, off); |
1212 | #endif | ||
1213 | 1202 | ||
1214 | return n; | 1203 | return n; |
1215 | } | 1204 | } |