Thread (6 messages) flat view 6 messages, 3 authors, 2016-06-20

RE: [PATCH net-next 1/3] net: ipv6: Move ip6_route_get_saddr to inline

From: David Laight <hidden>
Date: 2016-06-20 15:35:05

From: Behalf Of David Ahern
Sent: 17 June 2016 00:24
VRF driver needs access to ip6_route_get_saddr code. Since it does
little beyond ipv6_dev_get_saddr and ipv6_dev_get_saddr is already
exported for modules move ip6_route_get_saddr to the header as an
inline.

Code move only; no functional change.
Look a bit large for an inline.
quoted hunk ↗ jump to hunk
Signed-off-by: David Ahern <redacted>
---
 include/net/ip6_route.h | 21 ++++++++++++++++++---
 net/ipv6/route.c        | 17 -----------------
 2 files changed, 18 insertions(+), 20 deletions(-)
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index f55bf3d294aa..d97305d0e71f 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -18,6 +18,7 @@ struct route_info {
 	__u8			prefix[0];	/* 0,8 or 16 */
 };

+#include <net/addrconf.h>
 #include <net/flow.h>
 #include <net/ip6_fib.h>
 #include <net/sock.h>
@@ -88,9 +89,23 @@ int ip6_route_add(struct fib6_config *cfg);
 int ip6_ins_rt(struct rt6_info *);
 int ip6_del_rt(struct rt6_info *);

-int ip6_route_get_saddr(struct net *net, struct rt6_info *rt,
-			const struct in6_addr *daddr, unsigned int prefs,
-			struct in6_addr *saddr);
+static inline int ip6_route_get_saddr(struct net *net, struct rt6_info *rt,
+				      const struct in6_addr *daddr,
+				      unsigned int prefs,
+				      struct in6_addr *saddr)
+{
+	struct inet6_dev *idev =
+			rt ? ip6_dst_idev((struct dst_entry *)rt) : NULL;
+	int err = 0;
+
+	if (rt && rt->rt6i_prefsrc.plen)
+		*saddr = rt->rt6i_prefsrc.addr;
+	else
+		err = ipv6_dev_get_saddr(net, idev ? idev->dev : NULL,
+					 daddr, prefs, saddr);
+
+	return err;
+}
...

The above looks as though it might be:
	if (!rt)
		return ipv6_dev_get_saddr(net, NULL, dattr, prefs, saddr);
	if (!rt->rt6i_prefsrc.plen)
		return ipv6_dev_get_saddr(net, ip6_dst_idev((struct dst_entry *)rt)->dev, dattr, prefs, saddr);
	*saddr = rt->rt6i_prefsrc.addr;
	return 0;

which could inline to better code.
Alternatively just inline the fast path.

	David
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help