diff options
-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; |