diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 12:26:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 12:26:46 -0400 |
commit | 15c54033964a943de7b0763efd3bd0ede7326395 (patch) | |
tree | 840b292612d1b5396d5bab5bde537a9013db3ceb /net/bridge/br_netlink.c | |
parent | ad5da3cf39a5b11a198929be1f2644e17ecd767e (diff) | |
parent | 912a41a4ab935ce8c4308428ec13fc7f8b1f18f4 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (448 commits)
[IPV4] nl_fib_lookup: Initialise res.r before fib_res_put(&res)
[IPV6]: Fix thinko in ipv6_rthdr_rcv() changes.
[IPV4]: Add multipath cached to feature-removal-schedule.txt
[WIRELESS] cfg80211: Clarify locking comment.
[WIRELESS] cfg80211: Fix locking in wiphy_new.
[WEXT] net_device: Don't include wext bits if not required.
[WEXT]: Misc code cleanups.
[WEXT]: Reduce inline abuse.
[WEXT]: Move EXPORT_SYMBOL statements where they belong.
[WEXT]: Cleanup early ioctl call path.
[WEXT]: Remove options.
[WEXT]: Remove dead debug code.
[WEXT]: Clean up how wext is called.
[WEXT]: Move to net/wireless
[AFS]: Eliminate cmpxchg() usage in vlocation code.
[RXRPC]: Fix pointers passed to bitops.
[RXRPC]: Remove bogus atomic_* overrides.
[AFS]: Fix u64 printing in debug logging.
[AFS]: Add "directory write" support.
[AFS]: Implement the CB.InitCallBackState3 operation.
...
Diffstat (limited to 'net/bridge/br_netlink.c')
-rw-r--r-- | net/bridge/br_netlink.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index 7d68b24b5654..35facc0c11c2 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c | |||
@@ -11,8 +11,7 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/rtnetlink.h> | 14 | #include <net/rtnetlink.h> |
15 | #include <net/netlink.h> | ||
16 | #include "br_private.h" | 15 | #include "br_private.h" |
17 | 16 | ||
18 | static inline size_t br_nlmsg_size(void) | 17 | static inline size_t br_nlmsg_size(void) |
@@ -110,7 +109,6 @@ static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
110 | struct net_device *dev; | 109 | struct net_device *dev; |
111 | int idx; | 110 | int idx; |
112 | 111 | ||
113 | read_lock(&dev_base_lock); | ||
114 | for (dev = dev_base, idx = 0; dev; dev = dev->next) { | 112 | for (dev = dev_base, idx = 0; dev; dev = dev->next) { |
115 | /* not a bridge port */ | 113 | /* not a bridge port */ |
116 | if (dev->br_port == NULL || idx < cb->args[0]) | 114 | if (dev->br_port == NULL || idx < cb->args[0]) |
@@ -123,7 +121,6 @@ static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
123 | skip: | 121 | skip: |
124 | ++idx; | 122 | ++idx; |
125 | } | 123 | } |
126 | read_unlock(&dev_base_lock); | ||
127 | 124 | ||
128 | cb->args[0] = idx; | 125 | cb->args[0] = idx; |
129 | 126 | ||
@@ -166,7 +163,7 @@ static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
166 | return -EINVAL; | 163 | return -EINVAL; |
167 | 164 | ||
168 | /* if kernel STP is running, don't allow changes */ | 165 | /* if kernel STP is running, don't allow changes */ |
169 | if (p->br->stp_enabled) | 166 | if (p->br->stp_enabled == BR_KERNEL_STP) |
170 | return -EBUSY; | 167 | return -EBUSY; |
171 | 168 | ||
172 | if (!netif_running(dev) || | 169 | if (!netif_running(dev) || |
@@ -179,18 +176,19 @@ static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
179 | } | 176 | } |
180 | 177 | ||
181 | 178 | ||
182 | static struct rtnetlink_link bridge_rtnetlink_table[RTM_NR_MSGTYPES] = { | 179 | int __init br_netlink_init(void) |
183 | [RTM_GETLINK - RTM_BASE] = { .dumpit = br_dump_ifinfo, }, | ||
184 | [RTM_SETLINK - RTM_BASE] = { .doit = br_rtm_setlink, }, | ||
185 | }; | ||
186 | |||
187 | void __init br_netlink_init(void) | ||
188 | { | 180 | { |
189 | rtnetlink_links[PF_BRIDGE] = bridge_rtnetlink_table; | 181 | if (__rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, br_dump_ifinfo)) |
182 | return -ENOBUFS; | ||
183 | |||
184 | /* Only the first call to __rtnl_register can fail */ | ||
185 | __rtnl_register(PF_BRIDGE, RTM_SETLINK, br_rtm_setlink, NULL); | ||
186 | |||
187 | return 0; | ||
190 | } | 188 | } |
191 | 189 | ||
192 | void __exit br_netlink_fini(void) | 190 | void __exit br_netlink_fini(void) |
193 | { | 191 | { |
194 | rtnetlink_links[PF_BRIDGE] = NULL; | 192 | rtnl_unregister_all(PF_BRIDGE); |
195 | } | 193 | } |
196 | 194 | ||