[ovs-dev] [PATCH 07/11] datapath: Account for "genetlink: pass only network namespace to genl_has_listeners()"
Thomas Graf
tgraf at noironetworks.com
Tue Jan 27 15:35:10 UTC 2015
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 at intel.com>
Signed-off-by: David S. Miller <davem at davemloft.net>
Upstream: f8403a2 ("genetlink: pass only network namespace to genl_has_listeners()")
Signed-off-by: Thomas Graf <tgraf at noironetworks.com>
---
acinclude.m4 | 2 ++
datapath/datapath.c | 3 +--
datapath/linux/compat/include/net/genetlink.h | 18 ++++++++++++++----
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/acinclude.m4 b/acinclude.m4
index 8f10b98..04e2e4b 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -363,6 +363,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],
diff --git a/datapath/datapath.c b/datapath/datapath.c
index 5873f07..697a36b 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -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,
diff --git a/datapath/linux/compat/include/net/genetlink.h b/datapath/linux/compat/include/net/genetlink.h
index 182c85c..8d1b89e 100644
--- a/datapath/linux/compat/include/net/genetlink.h
+++ b/datapath/linux/compat/include/net/genetlink.h
@@ -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 */
--
1.9.3
More information about the dev
mailing list