diff options
| author | Eric Dumazet <edumazet@google.com> | 2013-10-18 17:43:55 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-10-19 19:14:14 -0400 |
| commit | b917eb155c56bbb766140b406979820e719e3f55 (patch) | |
| tree | e693e13064475ef6a942188a1f43a2c8aefce689 | |
| parent | ea58c18062f04d483d0b4bea51b1e7219b519255 (diff) | |
ipv6: gso: remove redundant locking
ipv6_gso_send_check() and ipv6_gso_segment() are called by
skb_mac_gso_segment() under rcu lock, no need to use
rcu_read_lock() / rcu_read_unlock()
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/ipv6/ip6_offload.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c index d82de7228100..b405fba91c72 100644 --- a/net/ipv6/ip6_offload.c +++ b/net/ipv6/ip6_offload.c | |||
| @@ -66,7 +66,6 @@ static int ipv6_gso_send_check(struct sk_buff *skb) | |||
| 66 | __skb_pull(skb, sizeof(*ipv6h)); | 66 | __skb_pull(skb, sizeof(*ipv6h)); |
| 67 | err = -EPROTONOSUPPORT; | 67 | err = -EPROTONOSUPPORT; |
| 68 | 68 | ||
| 69 | rcu_read_lock(); | ||
| 70 | ops = rcu_dereference(inet6_offloads[ | 69 | ops = rcu_dereference(inet6_offloads[ |
| 71 | ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr)]); | 70 | ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr)]); |
| 72 | 71 | ||
| @@ -74,7 +73,6 @@ static int ipv6_gso_send_check(struct sk_buff *skb) | |||
| 74 | skb_reset_transport_header(skb); | 73 | skb_reset_transport_header(skb); |
| 75 | err = ops->callbacks.gso_send_check(skb); | 74 | err = ops->callbacks.gso_send_check(skb); |
| 76 | } | 75 | } |
| 77 | rcu_read_unlock(); | ||
| 78 | 76 | ||
| 79 | out: | 77 | out: |
| 80 | return err; | 78 | return err; |
| @@ -113,13 +111,12 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, | |||
| 113 | segs = ERR_PTR(-EPROTONOSUPPORT); | 111 | segs = ERR_PTR(-EPROTONOSUPPORT); |
| 114 | 112 | ||
| 115 | proto = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr); | 113 | proto = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr); |
| 116 | rcu_read_lock(); | 114 | |
| 117 | ops = rcu_dereference(inet6_offloads[proto]); | 115 | ops = rcu_dereference(inet6_offloads[proto]); |
| 118 | if (likely(ops && ops->callbacks.gso_segment)) { | 116 | if (likely(ops && ops->callbacks.gso_segment)) { |
| 119 | skb_reset_transport_header(skb); | 117 | skb_reset_transport_header(skb); |
| 120 | segs = ops->callbacks.gso_segment(skb, features); | 118 | segs = ops->callbacks.gso_segment(skb, features); |
| 121 | } | 119 | } |
| 122 | rcu_read_unlock(); | ||
| 123 | 120 | ||
| 124 | if (IS_ERR(segs)) | 121 | if (IS_ERR(segs)) |
| 125 | goto out; | 122 | goto out; |
