From: David S. Miller Date: Thu, 17 Feb 2011 23:37:09 +0000 (-0800) Subject: ipv4: Move rcu_read_{lock,unlock}() into ip_route_output_slow(). X-Git-Tag: v3.0~1578^2~333 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=010c2708e536938a2f84d51d625f603b9a8f80ac;p=platform%2Fkernel%2Flinux-amlogic.git ipv4: Move rcu_read_{lock,unlock}() into ip_route_output_slow(). Simplifies tail of __ip_route_output_key(). Signed-off-by: David S. Miller --- diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 849be48..b2b3c9e 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2456,6 +2456,7 @@ static int ip_route_output_slow(struct net *net, struct rtable **rp, res.r = NULL; #endif + rcu_read_lock(); if (oldflp->fl4_src) { err = -EINVAL; if (ipv4_is_multicast(oldflp->fl4_src) || @@ -2617,15 +2618,16 @@ make_route: err = rt_intern_hash(hash, rth, rp, NULL, oldflp->oif); } -out: return err; +out: + rcu_read_unlock(); + return err; } int __ip_route_output_key(struct net *net, struct rtable **rp, const struct flowi *flp) { - unsigned int hash; - int res; struct rtable *rth; + unsigned int hash; if (!rt_caching(net)) goto slow_output; @@ -2655,10 +2657,7 @@ int __ip_route_output_key(struct net *net, struct rtable **rp, rcu_read_unlock_bh(); slow_output: - rcu_read_lock(); - res = ip_route_output_slow(net, rp, flp); - rcu_read_unlock(); - return res; + return ip_route_output_slow(net, rp, flp); } EXPORT_SYMBOL_GPL(__ip_route_output_key);