diff options
author | Vlad Yasevich <vyasevic@redhat.com> | 2012-11-15 03:49:23 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-15 17:39:51 -0500 |
commit | f191a1d17f227032c159e5499809f545402b6dc6 (patch) | |
tree | 48fc87a0b34bd2da06fedcd7e5e3ed6b08f7a3ac /net/core | |
parent | c6b641a4c6b32f39db678c2441cb1ef824110d74 (diff) |
net: Remove code duplication between offload structures
Move the offload callbacks into its own structure.
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index cf843a256cc6..cf105e886cca 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -2102,16 +2102,16 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, | |||
2102 | 2102 | ||
2103 | rcu_read_lock(); | 2103 | rcu_read_lock(); |
2104 | list_for_each_entry_rcu(ptype, &offload_base, list) { | 2104 | list_for_each_entry_rcu(ptype, &offload_base, list) { |
2105 | if (ptype->type == type && ptype->gso_segment) { | 2105 | if (ptype->type == type && ptype->callbacks.gso_segment) { |
2106 | if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) { | 2106 | if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) { |
2107 | err = ptype->gso_send_check(skb); | 2107 | err = ptype->callbacks.gso_send_check(skb); |
2108 | segs = ERR_PTR(err); | 2108 | segs = ERR_PTR(err); |
2109 | if (err || skb_gso_ok(skb, features)) | 2109 | if (err || skb_gso_ok(skb, features)) |
2110 | break; | 2110 | break; |
2111 | __skb_push(skb, (skb->data - | 2111 | __skb_push(skb, (skb->data - |
2112 | skb_network_header(skb))); | 2112 | skb_network_header(skb))); |
2113 | } | 2113 | } |
2114 | segs = ptype->gso_segment(skb, features); | 2114 | segs = ptype->callbacks.gso_segment(skb, features); |
2115 | break; | 2115 | break; |
2116 | } | 2116 | } |
2117 | } | 2117 | } |
@@ -3533,10 +3533,10 @@ static int napi_gro_complete(struct sk_buff *skb) | |||
3533 | 3533 | ||
3534 | rcu_read_lock(); | 3534 | rcu_read_lock(); |
3535 | list_for_each_entry_rcu(ptype, head, list) { | 3535 | list_for_each_entry_rcu(ptype, head, list) { |
3536 | if (ptype->type != type || !ptype->gro_complete) | 3536 | if (ptype->type != type || !ptype->callbacks.gro_complete) |
3537 | continue; | 3537 | continue; |
3538 | 3538 | ||
3539 | err = ptype->gro_complete(skb); | 3539 | err = ptype->callbacks.gro_complete(skb); |
3540 | break; | 3540 | break; |
3541 | } | 3541 | } |
3542 | rcu_read_unlock(); | 3542 | rcu_read_unlock(); |
@@ -3598,7 +3598,7 @@ enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) | |||
3598 | 3598 | ||
3599 | rcu_read_lock(); | 3599 | rcu_read_lock(); |
3600 | list_for_each_entry_rcu(ptype, head, list) { | 3600 | list_for_each_entry_rcu(ptype, head, list) { |
3601 | if (ptype->type != type || !ptype->gro_receive) | 3601 | if (ptype->type != type || !ptype->callbacks.gro_receive) |
3602 | continue; | 3602 | continue; |
3603 | 3603 | ||
3604 | skb_set_network_header(skb, skb_gro_offset(skb)); | 3604 | skb_set_network_header(skb, skb_gro_offset(skb)); |
@@ -3608,7 +3608,7 @@ enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) | |||
3608 | NAPI_GRO_CB(skb)->flush = 0; | 3608 | NAPI_GRO_CB(skb)->flush = 0; |
3609 | NAPI_GRO_CB(skb)->free = 0; | 3609 | NAPI_GRO_CB(skb)->free = 0; |
3610 | 3610 | ||
3611 | pp = ptype->gro_receive(&napi->gro_list, skb); | 3611 | pp = ptype->callbacks.gro_receive(&napi->gro_list, skb); |
3612 | break; | 3612 | break; |
3613 | } | 3613 | } |
3614 | rcu_read_unlock(); | 3614 | rcu_read_unlock(); |