From 6233a1bdf17e30800c9734374f1aa36ff7214f7e Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Tue, 3 Feb 2015 21:53:36 +0100 Subject: [PATCH] datapath: Account for "genetlink: pass only network namespace to genl_has_listeners()" 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 Signed-off-by: David S. Miller Upstream: f8403a2 ("genetlink: pass only network namespace to genl_has_listeners()") Signed-off-by: Thomas Graf Acked-by: Pravin B Shelar --- 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 3d2dc63a8..cb3e14828 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -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], diff --git a/datapath/datapath.c b/datapath/datapath.c index 5873f072b..697a36b9b 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 182c85c17..8d1b89e37 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 */ -- 2.20.1