Move commonly used pattern of ip6_dst_store() usage to a separate
function - ip6_dst_store_flow(), which will check the addresses
for equality before saving them.

There is no functional changes in this patch, the new wrapper
will be used in the next patch, in ip6_sk_dst_lookup_flow().

Signed-off-by: Alexey Kodanev <alexey.koda...@oracle.com>
---
 include/net/ip6_route.h | 17 +++++++++++++++++
 net/ipv6/datagram.c     |  9 +--------
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index ac0866b..36c3946 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -210,6 +210,23 @@ static inline void ip6_dst_store(struct sock *sk, struct 
dst_entry *dst,
 #endif
 }
 
+static inline void ip6_dst_store_flow(struct sock *sk, struct dst_entry *dst,
+                                     struct flowi6 *fl6)
+{
+#ifdef CONFIG_IPV6_SUBTREES
+       struct ipv6_pinfo *np = inet6_sk(sk);
+#endif
+
+       ip6_dst_store(sk, dst,
+                     ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ?
+                     &sk->sk_v6_daddr : NULL,
+#ifdef CONFIG_IPV6_SUBTREES
+                     ipv6_addr_equal(&fl6->saddr, &np->saddr) ?
+                     &np->saddr :
+#endif
+                     NULL);
+}
+
 static inline bool ipv6_unicast_destination(const struct sk_buff *skb)
 {
        struct rt6_info *rt = (struct rt6_info *) skb_dst(skb);
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index a9f7eca..8b4fa0c 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -106,14 +106,7 @@ int ip6_datagram_dst_update(struct sock *sk, bool 
fix_sk_saddr)
                }
        }
 
-       ip6_dst_store(sk, dst,
-                     ipv6_addr_equal(&fl6.daddr, &sk->sk_v6_daddr) ?
-                     &sk->sk_v6_daddr : NULL,
-#ifdef CONFIG_IPV6_SUBTREES
-                     ipv6_addr_equal(&fl6.saddr, &np->saddr) ?
-                     &np->saddr :
-#endif
-                     NULL);
+       ip6_dst_store_flow(sk, dst, &fl6);
 
 out:
        fl6_sock_release(flowlabel);
-- 
1.8.3.1

Reply via email to