Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 010c2708 authored by David S. Miller's avatar David S. Miller
Browse files

ipv4: Move rcu_read_{lock,unlock}() into ip_route_output_slow().



Simplifies tail of __ip_route_output_key().

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5ada5527
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -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 @@ static int ip_route_output_slow(struct net *net, struct rtable **rp,
		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);