datapath: Account for "genetlink: pass only network namespace to genl_has_listeners()"
authorThomas Graf <tgraf@noironetworks.com>
Tue, 3 Feb 2015 20:53:36 +0000 (21:53 +0100)
committerThomas Graf <tgraf@noironetworks.com>
Tue, 3 Feb 2015 21:31:20 +0000 (22:31 +0100)
Upstream commit:
    genetlink: pass only network namespace to genl_has_listeners()

    There's no point to force the caller to know about the internal
    genl_sock to use inside struct net, just have them pass the network
    namespace. This doesn't really change code generation since it's
    an inline, but makes the caller less magic - there's never any
    reason to pass another socket.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Upstream: f8403a2 ("genetlink: pass only network namespace to genl_has_listeners()")
Signed-off-by: Thomas Graf <tgraf@noironetworks.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
acinclude.m4
datapath/datapath.c
datapath/linux/compat/include/net/genetlink.h

index 3d2dc63..cb3e148 100644 (file)
@@ -362,6 +362,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
   OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [mcgrp_offset])
   OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [parallel_ops])
   OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [genlmsg_new_unicast])
+  OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [netlink_has_listeners(net->genl_sock],
+                  [OVS_DEFINE([HAVE_GENL_HAS_LISTENERS_TAKES_NET])])
   OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [gre_cisco_register])
   OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [gre_handle_offloads])
   OVS_GREP_IFELSE([$KSRC/include/net/ip_tunnels.h], [iptunnel_xmit.*net],
index 5873f07..697a36b 100644 (file)
@@ -85,8 +85,7 @@ static bool ovs_must_notify(struct genl_family *family, struct genl_info *info,
                            unsigned int group)
 {
        return info->nlhdr->nlmsg_flags & NLM_F_ECHO ||
-              genl_has_listeners(family, genl_info_net(info)->genl_sock,
-                                 group);
+              genl_has_listeners(family, genl_info_net(info), group);
 }
 
 static void ovs_notify(struct genl_family *family, struct genl_multicast_group *grp,
index 182c85c..8d1b89e 100644 (file)
@@ -107,17 +107,27 @@ static inline struct sk_buff *genlmsg_new_unicast(size_t payload,
 
 #ifndef HAVE_GENL_HAS_LISTENERS
 static inline int genl_has_listeners(struct genl_family *family,
-                                    struct sock *sk, unsigned int group)
+                                    struct net *net, unsigned int group)
 {
 #ifdef HAVE_MCGRP_OFFSET
        if (WARN_ON_ONCE(group >= family->n_mcgrps))
                return -EINVAL;
        group = family->mcgrp_offset + group;
-       return netlink_has_listeners(sk, group);
-#else
-       return netlink_has_listeners(sk, group);
 #endif
+       return netlink_has_listeners(net->genl_sock, group);
 }
+#else
+
+#ifndef HAVE_GENL_HAS_LISTENERS_TAKES_NET
+static inline int rpl_genl_has_listeners(struct genl_family *family,
+                                        struct net *net, unsigned int group)
+{
+    return genl_has_listeners(family, net->genl_sock, group);
+}
+
+#define genl_has_listeners rpl_genl_has_listeners
 #endif
 
+#endif /* HAVE_GENL_HAS_LISTENERS */
+
 #endif /* genetlink.h */