Cleanup of net_device list use in network device drivers and protocols
other than IP.
The cleanup consists of
- converting the to list_head, to make the list double-linked (thus making
remove operation O(1)), and list walks more readable;
- introducing of for_each_netdev wrapper over list_for_each.
Signed-off-by: Andrey Savochkin [EMAIL PROTECTED]
---
Requires bridge: br_dump_ifinfo index fix
drivers/net/wireless/strip.c |4 +---
net/8021q/vlan.c |4 ++--
net/8021q/vlanproc.c | 10 +-
net/bridge/br_if.c |4 ++--
net/bridge/br_ioctl.c|4 +++-
net/bridge/br_netlink.c |3 ++-
net/decnet/af_decnet.c | 11 +++
net/decnet/dn_dev.c | 17 ++---
net/decnet/dn_fib.c |2 +-
net/decnet/dn_route.c| 13 +++--
net/llc/llc_core.c |7 +--
net/netrom/nr_route.c|5 +++--
net/rose/rose_route.c|8 +---
net/sctp/protocol.c |2 +-
net/tipc/eth_media.c | 11 +++
15 files changed, 61 insertions(+), 44 deletions(-)
--- ./drivers/net/wireless/strip.c.vedevbase-onet Mon Jul 3 15:13:46 2006
+++ ./drivers/net/wireless/strip.c Mon Jul 3 16:12:11 2006
@@ -1969,8 +1969,7 @@ static struct net_device *get_strip_dev(
sizeof(zero_address))) {
struct net_device *dev;
read_lock_bh(dev_base_lock);
- dev = dev_base;
- while (dev) {
+ for_each_netdev(dev) {
if (dev-type == strip_info-dev-type
!memcmp(dev-dev_addr,
strip_info-true_dev_addr,
@@ -1981,7 +1980,6 @@ static struct net_device *get_strip_dev(
read_unlock_bh(dev_base_lock);
return (dev);
}
- dev = dev-next;
}
read_unlock_bh(dev_base_lock);
}
--- ./net/8021q/vlan.c.vedevbase-onet Mon Jul 3 15:14:17 2006
+++ ./net/8021q/vlan.c Mon Jul 3 16:12:11 2006
@@ -121,8 +121,8 @@ static void __exit vlan_cleanup_devices(
struct net_device *dev, *nxt;
rtnl_lock();
- for (dev = dev_base; dev; dev = nxt) {
- nxt = dev-next;
+ for (dev = first_netdev(); dev; dev = nxt) {
+ nxt = next_netdev(dev);
if (dev-priv_flags IFF_802_1Q_VLAN) {
unregister_vlan_dev(VLAN_DEV_INFO(dev)-real_dev,
VLAN_DEV_INFO(dev)-vlan_id);
--- ./net/8021q/vlanproc.c.vedevbase-onet Mon Jul 3 15:14:17 2006
+++ ./net/8021q/vlanproc.c Mon Jul 3 16:12:11 2006
@@ -241,7 +241,7 @@ int vlan_proc_rem_dev(struct net_device
static struct net_device *vlan_skip(struct net_device *dev)
{
while (dev !(dev-priv_flags IFF_802_1Q_VLAN))
- dev = dev-next;
+ dev = next_netdev(dev);
return dev;
}
@@ -257,8 +257,8 @@ static void *vlan_seq_start(struct seq_f
if (*pos == 0)
return SEQ_START_TOKEN;
- for (dev = vlan_skip(dev_base); dev i *pos;
-dev = vlan_skip(dev-next), ++i);
+ for (dev = vlan_skip(first_netdev()); dev i *pos;
+dev = vlan_skip(next_netdev(dev)), ++i);
return (i == *pos) ? dev : NULL;
}
@@ -268,8 +268,8 @@ static void *vlan_seq_next(struct seq_fi
++*pos;
return vlan_skip((v == SEQ_START_TOKEN)
- ? dev_base
- : ((struct net_device *)v)-next);
+ ? first_netdev()
+ : next_netdev((struct net_device *)v));
}
static void vlan_seq_stop(struct seq_file *seq, void *v)
--- ./net/bridge/br_if.c.vedevbase-onet Mon Jul 3 15:14:19 2006
+++ ./net/bridge/br_if.cMon Jul 3 16:12:11 2006
@@ -474,8 +474,8 @@ void __exit br_cleanup_bridges(void)
struct net_device *dev, *nxt;
rtnl_lock();
- for (dev = dev_base; dev; dev = nxt) {
- nxt = dev-next;
+ for (dev = first_netdev(); dev; dev = nxt) {
+ nxt = next_netdev(dev);
if (dev-priv_flags IFF_EBRIDGE)
del_br(dev-priv);
}
--- ./net/bridge/br_ioctl.c.vedevbase-onet Mon Mar 20 08:53:29 2006
+++ ./net/bridge/br_ioctl.c Mon Jul 3 16:12:11 2006
@@ -27,7 +27,9 @@ static int get_bridge_ifindices(int *ind
struct net_device *dev;
int i = 0;
- for (dev = dev_base; dev i num; dev = dev-next) {
+ for_each_netdev(dev) {
+ if (i = num)
+ break;
if (dev-priv_flags IFF_EBRIDGE)
indices[i++] = dev-ifindex;
}
--- ./net/bridge/br_netlink.c.vedevbase-onetMon Jul 3 16:12:11 2006
+++