proc: consolidate per-net single_open callers
Pavel Emelyanov [Fri, 18 Jul 2008 11:07:21 +0000 (04:07 -0700)]
There are already 7 of them - time to kill some duplicate code.

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

fs/proc/proc_net.c
include/linux/seq_file_net.h
net/ipv4/fib_trie.c
net/ipv4/proc.c
net/ipv6/proc.c
net/ipv6/route.c

index 83f357b..ab232ad 100644 (file)
@@ -51,6 +51,30 @@ int seq_open_net(struct inode *ino, struct file *f,
 }
 EXPORT_SYMBOL_GPL(seq_open_net);
 
+int single_open_net(struct inode *inode, struct file *file,
+               int (*show)(struct seq_file *, void *))
+{
+       int err;
+       struct net *net;
+
+       err = -ENXIO;
+       net = get_proc_net(inode);
+       if (net == NULL)
+               goto err_net;
+
+       err = single_open(file, show, net);
+       if (err < 0)
+               goto err_open;
+
+       return 0;
+
+err_open:
+       put_net(net);
+err_net:
+       return err;
+}
+EXPORT_SYMBOL_GPL(single_open_net);
+
 int seq_release_net(struct inode *ino, struct file *f)
 {
        struct seq_file *seq;
index 4ac5254..87dcc0e 100644 (file)
@@ -14,6 +14,8 @@ struct seq_net_private {
 
 int seq_open_net(struct inode *, struct file *,
                 const struct seq_operations *, int);
+int single_open_net(struct inode *, struct file *file,
+               int (*show)(struct seq_file *, void *));
 int seq_release_net(struct inode *, struct file *);
 static inline struct net *seq_file_net(struct seq_file *seq)
 {
index f155a66..6009df2 100644 (file)
@@ -2251,18 +2251,7 @@ static int fib_triestat_seq_show(struct seq_file *seq, void *v)
 
 static int fib_triestat_seq_open(struct inode *inode, struct file *file)
 {
-       int err;
-       struct net *net;
-
-       net = get_proc_net(inode);
-       if (net == NULL)
-               return -ENXIO;
-       err = single_open(file, fib_triestat_seq_show, net);
-       if (err < 0) {
-               put_net(net);
-               return err;
-       }
-       return 0;
+       return single_open_net(inode, file, fib_triestat_seq_show);
 }
 
 static int fib_triestat_seq_release(struct inode *ino, struct file *f)
index 5543904..daf5d3c 100644 (file)
@@ -71,24 +71,7 @@ static int sockstat_seq_show(struct seq_file *seq, void *v)
 
 static int sockstat_seq_open(struct inode *inode, struct file *file)
 {
-       int err;
-       struct net *net;
-
-       err = -ENXIO;
-       net = get_proc_net(inode);
-       if (net == NULL)
-               goto err_net;
-
-       err = single_open(file, sockstat_seq_show, net);
-       if (err < 0)
-               goto err_open;
-
-       return 0;
-
-err_open:
-       put_net(net);
-err_net:
-       return err;
+       return single_open_net(inode, file, sockstat_seq_show);
 }
 
 static int sockstat_seq_release(struct inode *inode, struct file *file)
@@ -397,24 +380,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
 
 static int snmp_seq_open(struct inode *inode, struct file *file)
 {
-       int err;
-       struct net *net;
-
-       err = -ENXIO;
-       net = get_proc_net(inode);
-       if (net == NULL)
-               goto err_net;
-
-       err = single_open(file, snmp_seq_show, net);
-       if (err < 0)
-               goto err_open;
-
-       return 0;
-
-err_open:
-       put_net(net);
-err_net:
-       return err;
+       return single_open_net(inode, file, snmp_seq_show);
 }
 
 static int snmp_seq_release(struct inode *inode, struct file *file)
@@ -469,24 +435,7 @@ static int netstat_seq_show(struct seq_file *seq, void *v)
 
 static int netstat_seq_open(struct inode *inode, struct file *file)
 {
-       int err;
-       struct net *net;
-
-       err = -ENXIO;
-       net = get_proc_net(inode);
-       if (net == NULL)
-               goto err_net;
-
-       err = single_open(file, netstat_seq_show, net);
-       if (err < 0)
-               goto err_open;
-
-       return 0;
-
-err_open:
-       put_net(net);
-err_net:
-       return err;
+       return single_open_net(inode, file, netstat_seq_show);
 }
 
 static int netstat_seq_release(struct inode *inode, struct file *file)
index cbc7e51..29c5a79 100644 (file)
@@ -183,24 +183,7 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
 
 static int sockstat6_seq_open(struct inode *inode, struct file *file)
 {
-       int err;
-       struct net *net;
-
-       err = -ENXIO;
-       net = get_proc_net(inode);
-       if (net == NULL)
-               goto err_net;
-
-       err = single_open(file, sockstat6_seq_show, net);
-       if (err < 0)
-               goto err_open;
-
-       return 0;
-
-err_open:
-       put_net(net);
-err_net:
-       return err;
+       return single_open_net(inode, file, sockstat6_seq_show);
 }
 
 static int sockstat6_seq_release(struct inode *inode, struct file *file)
index 5d6c166..fb7ff8f 100644 (file)
@@ -2416,18 +2416,7 @@ static int ipv6_route_show(struct seq_file *m, void *v)
 
 static int ipv6_route_open(struct inode *inode, struct file *file)
 {
-       int err;
-       struct net *net = get_proc_net(inode);
-       if (!net)
-               return -ENXIO;
-
-       err = single_open(file, ipv6_route_show, net);
-       if (err < 0) {
-               put_net(net);
-               return err;
-       }
-
-       return 0;
+       return single_open_net(inode, file, ipv6_route_show);
 }
 
 static int ipv6_route_release(struct inode *inode, struct file *file)
@@ -2463,18 +2452,7 @@ static int rt6_stats_seq_show(struct seq_file *seq, void *v)
 
 static int rt6_stats_seq_open(struct inode *inode, struct file *file)
 {
-       int err;
-       struct net *net = get_proc_net(inode);
-       if (!net)
-               return -ENXIO;
-
-       err = single_open(file, rt6_stats_seq_show, net);
-       if (err < 0) {
-               put_net(net);
-               return err;
-       }
-
-       return 0;
+       return single_open_net(inode, file, rt6_stats_seq_show);
 }
 
 static int rt6_stats_seq_release(struct inode *inode, struct file *file)