From 9a3c28351c2061d3174a1637d70eb8bbaf43dfc5 Mon Sep 17 00:00:00 2001 From: Jiri Olsa Date: Tue, 20 Apr 2010 14:22:39 +0200 Subject: [PATCH 3/4] gennl changes - adding non locking multicast functions --- include/net/genetlink.h | 5 +++++ net/netlink/genetlink.c | 20 +++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/include/net/genetlink.h b/include/net/genetlink.h index eb551ba..e06a026 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h @@ -119,8 +119,13 @@ extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); extern int genl_register_mc_group(struct genl_family *family, struct genl_multicast_group *grp); +extern int __genl_register_mc_group(struct genl_family *family, + struct genl_multicast_group *grp); extern void genl_unregister_mc_group(struct genl_family *family, struct genl_multicast_group *grp); +extern void __genl_unregister_mc_group(struct genl_family *family, + struct genl_multicast_group *grp); + /** * genlmsg_put - Add generic netlink header to netlink message diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index 06438fa..3a3f579 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c @@ -124,7 +124,7 @@ static struct genl_multicast_group notify_grp; * @family: The generic netlink family the group shall be registered for. * @grp: The group to register, must have a name. */ -int genl_register_mc_group(struct genl_family *family, +int __genl_register_mc_group(struct genl_family *family, struct genl_multicast_group *grp) { int id; @@ -133,8 +133,6 @@ int genl_register_mc_group(struct genl_family *family, BUG_ON(grp->name[0] == '\0'); - genl_lock(); - /* special-case our own group */ if (grp == ¬ify_grp) id = GENL_ID_CTRL; @@ -202,13 +200,25 @@ int genl_register_mc_group(struct genl_family *family, genl_ctrl_event(CTRL_CMD_NEWMCAST_GRP, grp); out: + return err; +} +EXPORT_SYMBOL(__genl_register_mc_group); + +int genl_register_mc_group(struct genl_family *family, + struct genl_multicast_group *grp) +{ + int err; + + genl_lock(); + err = __genl_register_mc_group(family, grp); genl_unlock(); + return err; } EXPORT_SYMBOL(genl_register_mc_group); -static void __genl_unregister_mc_group(struct genl_family *family, - struct genl_multicast_group *grp) +void __genl_unregister_mc_group(struct genl_family *family, + struct genl_multicast_group *grp) { struct net *net; BUG_ON(grp->family != family); -- 1.6.6.1