Skip to content

Commit

Permalink
proc: consolidate per-net single_open callers
Browse files Browse the repository at this point in the history
There are already 7 of them - time to kill some duplicate code.

Signed-off-by: Pavel Emelyanov <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
xemul authored and davem330 committed Jul 18, 2008
1 parent 60bdde9 commit de05c55
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 108 deletions.
24 changes: 24 additions & 0 deletions fs/proc/proc_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions include/linux/seq_file_net.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
13 changes: 1 addition & 12 deletions net/ipv4/fib_trie.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
57 changes: 3 additions & 54 deletions net/ipv4/proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
19 changes: 1 addition & 18 deletions net/ipv6/proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
26 changes: 2 additions & 24 deletions net/ipv6/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit de05c55

Please sign in to comment.