projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw
[powerpc.git]
/
net
/
bridge
/
br_netlink.c
diff --git
a/net/bridge/br_netlink.c
b/net/bridge/br_netlink.c
index
7d68b24
..
53ab8e0
100644
(file)
--- a/
net/bridge/br_netlink.c
+++ b/
net/bridge/br_netlink.c
@@
-11,8
+11,8
@@
*/
#include <linux/kernel.h>
*/
#include <linux/kernel.h>
-#include <
linux
/rtnetlink.h>
-#include <net/net
link
.h>
+#include <
net
/rtnetlink.h>
+#include <net/net
_namespace
.h>
#include "br_private.h"
static inline size_t br_nlmsg_size(void)
#include "br_private.h"
static inline size_t br_nlmsg_size(void)
@@
-110,8
+110,8
@@
static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
struct net_device *dev;
int idx;
struct net_device *dev;
int idx;
-
read_lock(&dev_base_lock)
;
- for
(dev = dev_base, idx = 0; dev; dev = dev->next
) {
+
idx = 0
;
+ for
_each_netdev(&init_net, dev
) {
/* not a bridge port */
if (dev->br_port == NULL || idx < cb->args[0])
goto skip;
/* not a bridge port */
if (dev->br_port == NULL || idx < cb->args[0])
goto skip;
@@
-123,7
+123,6
@@
static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
skip:
++idx;
}
skip:
++idx;
}
- read_unlock(&dev_base_lock);
cb->args[0] = idx;
cb->args[0] = idx;
@@
-157,7
+156,7
@@
static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
if (new_state > BR_STATE_BLOCKING)
return -EINVAL;
if (new_state > BR_STATE_BLOCKING)
return -EINVAL;
- dev = __dev_get_by_index(ifm->ifi_index);
+ dev = __dev_get_by_index(
&init_net,
ifm->ifi_index);
if (!dev)
return -ENODEV;
if (!dev)
return -ENODEV;
@@
-166,7
+165,7
@@
static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
return -EINVAL;
/* if kernel STP is running, don't allow changes */
return -EINVAL;
/* if kernel STP is running, don't allow changes */
- if (p->br->stp_enabled)
+ if (p->br->stp_enabled
== BR_KERNEL_STP
)
return -EBUSY;
if (!netif_running(dev) ||
return -EBUSY;
if (!netif_running(dev) ||
@@
-179,18
+178,19
@@
static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
}
}
-static struct rtnetlink_link bridge_rtnetlink_table[RTM_NR_MSGTYPES] = {
- [RTM_GETLINK - RTM_BASE] = { .dumpit = br_dump_ifinfo, },
- [RTM_SETLINK - RTM_BASE] = { .doit = br_rtm_setlink, },
-};
-
-void __init br_netlink_init(void)
+int __init br_netlink_init(void)
{
{
- rtnetlink_links[PF_BRIDGE] = bridge_rtnetlink_table;
+ if (__rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, br_dump_ifinfo))
+ return -ENOBUFS;
+
+ /* Only the first call to __rtnl_register can fail */
+ __rtnl_register(PF_BRIDGE, RTM_SETLINK, br_rtm_setlink, NULL);
+
+ return 0;
}
void __exit br_netlink_fini(void)
{
}
void __exit br_netlink_fini(void)
{
- rtn
etlink_links[PF_BRIDGE] = NULL
;
+ rtn
l_unregister_all(PF_BRIDGE)
;
}
}