diff options
author | David Ahern <dsahern@gmail.com> | 2019-08-01 15:18:08 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-08-05 13:17:54 -0700 |
commit | 43a4b60d04362185cd5475fd77a02bf6c56c07e4 (patch) | |
tree | fde1eeba44b0cd7009621a1f4c0373f3a8562887 /net | |
parent | 5a0d7dcf85d0845572e3592d25c670609bc27a55 (diff) | |
download | linux-43a4b60d04362185cd5475fd77a02bf6c56c07e4.tar.bz2 |
ipv6: have a single rcu unlock point in __ip6_rt_update_pmtu
Simplify the unlock path in __ip6_rt_update_pmtu by using a
single point where rcu_read_unlock is called.
Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/route.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index e49fec767a10..3c5c331b50f1 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -2725,10 +2725,9 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk, rcu_read_lock(); res.f6i = rcu_dereference(rt6->from); - if (!res.f6i) { - rcu_read_unlock(); - return; - } + if (!res.f6i) + goto out_unlock; + res.fib6_flags = res.f6i->fib6_flags; res.fib6_type = res.f6i->fib6_type; @@ -2744,10 +2743,8 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk, /* fib6_info uses a nexthop that does not have fib6_nh * using the dst->dev + gw. Should be impossible. */ - if (!arg.match) { - rcu_read_unlock(); - return; - } + if (!arg.match) + goto out_unlock; res.nh = arg.match; } else { @@ -2760,6 +2757,7 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk, if (rt6_insert_exception(nrt6, &res)) dst_release_immediate(&nrt6->dst); } +out_unlock: rcu_read_unlock(); } } |