diff options
author | Eric Dumazet <edumazet@google.com> | 2021-11-24 01:56:07 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2021-11-25 04:21:42 +0300 |
commit | fc1ca3348a74a1afaa7ffebc2b2f2cc149e11278 (patch) | |
tree | f3a16dc7567519f4257f4caf884d4ab770f0bf92 /net/ipv4/fou.c | |
parent | 1aad9634b94ef65d72110a6fc6625c890db9667c (diff) | |
download | linux-fc1ca3348a74a1afaa7ffebc2b2f2cc149e11278.tar.xz |
gro: remove rcu_read_lock/rcu_read_unlock from gro_receive handlers
All gro_receive() handlers are called from dev_gro_receive()
while rcu_read_lock() has been called.
There is no point stacking more rcu_read_lock()
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/ipv4/fou.c')
-rw-r--r-- | net/ipv4/fou.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c index b56d6b40c0a2..6ebc345e6001 100644 --- a/net/ipv4/fou.c +++ b/net/ipv4/fou.c @@ -247,17 +247,14 @@ static struct sk_buff *fou_gro_receive(struct sock *sk, /* Flag this frame as already having an outer encap header */ NAPI_GRO_CB(skb)->is_fou = 1; - rcu_read_lock(); offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; ops = rcu_dereference(offloads[proto]); if (!ops || !ops->callbacks.gro_receive) - goto out_unlock; + goto out; pp = call_gro_receive(ops->callbacks.gro_receive, head, skb); -out_unlock: - rcu_read_unlock(); - +out: return pp; } @@ -439,17 +436,14 @@ next_proto: /* Flag this frame as already having an outer encap header */ NAPI_GRO_CB(skb)->is_fou = 1; - rcu_read_lock(); offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; ops = rcu_dereference(offloads[proto]); if (WARN_ON_ONCE(!ops || !ops->callbacks.gro_receive)) - goto out_unlock; + goto out; pp = call_gro_receive(ops->callbacks.gro_receive, head, skb); flush = 0; -out_unlock: - rcu_read_unlock(); out: skb_gro_flush_final_remcsum(skb, pp, flush, &grc); |