]> err.no Git - linux-2.6/commitdiff
[NET]: Use existing device list walker for /proc/dev_mcast.
authorPavel Emelyanov <xemul@openvz.org>
Fri, 29 Feb 2008 19:44:14 +0000 (11:44 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 29 Feb 2008 19:44:14 +0000 (11:44 -0800)
The seq_file_operations' dev_mc_seq_xxx callbacks do the same thing as
the dev_seq_xxx ones do, but skip the SEQ_START_TOKEN.

So use the existing exported dev_seq_xxx calls and handle the
SEQ_START_TOKEN in the dev_mc_seq_show().

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev_mcast.c

index cec582563e0dcdbfcf15aa535115b62d35d29041..f8a3455f4493f7276fe614af6dbd7c26f4f04cb8 100644 (file)
@@ -156,39 +156,14 @@ void dev_mc_unsync(struct net_device *to, struct net_device *from)
 EXPORT_SYMBOL(dev_mc_unsync);
 
 #ifdef CONFIG_PROC_FS
-static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos)
-       __acquires(dev_base_lock)
-{
-       struct net *net = seq_file_net(seq);
-       struct net_device *dev;
-       loff_t off = 0;
-
-       read_lock(&dev_base_lock);
-       for_each_netdev(net, dev) {
-               if (off++ == *pos)
-                       return dev;
-       }
-       return NULL;
-}
-
-static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
-{
-       ++*pos;
-       return next_net_device((struct net_device *)v);
-}
-
-static void dev_mc_seq_stop(struct seq_file *seq, void *v)
-       __releases(dev_base_lock)
-{
-       read_unlock(&dev_base_lock);
-}
-
-
 static int dev_mc_seq_show(struct seq_file *seq, void *v)
 {
        struct dev_addr_list *m;
        struct net_device *dev = v;
 
+       if (v == SEQ_START_TOKEN)
+               return 0;
+
        netif_tx_lock_bh(dev);
        for (m = dev->mc_list; m; m = m->next) {
                int i;
@@ -206,9 +181,9 @@ static int dev_mc_seq_show(struct seq_file *seq, void *v)
 }
 
 static const struct seq_operations dev_mc_seq_ops = {
-       .start = dev_mc_seq_start,
-       .next  = dev_mc_seq_next,
-       .stop  = dev_mc_seq_stop,
+       .start = dev_seq_start,
+       .next  = dev_seq_next,
+       .stop  = dev_seq_stop,
        .show  = dev_mc_seq_show,
 };