diff options
author | Eric Dumazet <edumazet@google.com> | 2013-01-07 04:28:21 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-08 20:51:54 -0500 |
commit | fda55eca5a33f33ffcd4192c6b2d75179714a52c (patch) | |
tree | 54b8e755273ab37fa54cfdd0867b2e7631eb4b10 /net/core | |
parent | 0edb7ede7d524377afbaf48a35654baa52368f4b (diff) |
net: introduce skb_transport_header_was_set()
We have skb_mac_header_was_set() helper to tell if mac_header
was set on a skb. We would like the same for transport_header.
__netif_receive_skb() doesn't reset the transport header if already
set by GRO layer.
Note that network stacks usually reset the transport header anyway,
after pulling the network header, so this change only allows
a followup patch to have more precise qdisc pkt_len computation
for GSO packets at ingress side.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 3 | ||||
-rw-r--r-- | net/core/skbuff.c | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index a51ccf46e8b7..2e2448201a76 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -3352,7 +3352,8 @@ static int __netif_receive_skb(struct sk_buff *skb) | |||
3352 | orig_dev = skb->dev; | 3352 | orig_dev = skb->dev; |
3353 | 3353 | ||
3354 | skb_reset_network_header(skb); | 3354 | skb_reset_network_header(skb); |
3355 | skb_reset_transport_header(skb); | 3355 | if (!skb_transport_header_was_set(skb)) |
3356 | skb_reset_transport_header(skb); | ||
3356 | skb_reset_mac_len(skb); | 3357 | skb_reset_mac_len(skb); |
3357 | 3358 | ||
3358 | pt_prev = NULL; | 3359 | pt_prev = NULL; |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index b03fc0c6a952..1e1b9ea0296d 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -260,6 +260,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask, | |||
260 | skb->end = skb->tail + size; | 260 | skb->end = skb->tail + size; |
261 | #ifdef NET_SKBUFF_DATA_USES_OFFSET | 261 | #ifdef NET_SKBUFF_DATA_USES_OFFSET |
262 | skb->mac_header = ~0U; | 262 | skb->mac_header = ~0U; |
263 | skb->transport_header = ~0U; | ||
263 | #endif | 264 | #endif |
264 | 265 | ||
265 | /* make sure we initialize shinfo sequentially */ | 266 | /* make sure we initialize shinfo sequentially */ |
@@ -328,6 +329,7 @@ struct sk_buff *build_skb(void *data, unsigned int frag_size) | |||
328 | skb->end = skb->tail + size; | 329 | skb->end = skb->tail + size; |
329 | #ifdef NET_SKBUFF_DATA_USES_OFFSET | 330 | #ifdef NET_SKBUFF_DATA_USES_OFFSET |
330 | skb->mac_header = ~0U; | 331 | skb->mac_header = ~0U; |
332 | skb->transport_header = ~0U; | ||
331 | #endif | 333 | #endif |
332 | 334 | ||
333 | /* make sure we initialize shinfo sequentially */ | 335 | /* make sure we initialize shinfo sequentially */ |