Re: [patch 4/7] net_device list cleanup: drivers and non-IP protocols

2006-07-07 Thread Stephen Hemminger
On Mon, 3 Jul 2006 12:18:54 +0400
Andrey Savochkin [EMAIL PROTECTED] wrote:

 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;

Maybe this should be RCU'd to get rid of the read_lock.

  - introducing of for_each_netdev wrapper over list_for_each.
 
 Signed-off-by: Andrey Savochkin [EMAIL PROTECTED]

Looks good thanks.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[patch 4/7] net_device list cleanup: drivers and non-IP protocols

2006-07-03 Thread Andrey Savochkin
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
+++