From a234b5fd654474b10f344fc01e4de22b827c4c00 Mon Sep 17 00:00:00 2001 From: jolsa@redhat.com Date: Thu, 25 Mar 2010 08:59:04 +0100 Subject: [PATCH 2/3] 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 a4b6e14..5d9d158 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c @@ -123,7 +123,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; @@ -132,8 +132,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; @@ -201,13 +199,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