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 == ¬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
|