summaryrefslogtreecommitdiffstats
path: root/kernel/0003-gennl-changes-adding-non-locking-multicast-functions.patch
blob: 3196d9e7e4842424c8283bddf80f4f5dc7fa2e78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
From 9a3c28351c2061d3174a1637d70eb8bbaf43dfc5 Mon Sep 17 00:00:00 2001
From: Jiri Olsa <Jiri Olsa jolsa@redhat.com>
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 == &notify_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