proc: introduce proc_create_net_single

Variant of proc_create_data that directly take a seq_file show
callback and deals with network namespaces in ->open and ->release.
All callers of proc_create + single_open_net converted over, and
single_{open,release}_net are removed entirely.

Signed-off-by: Christoph Hellwig <[email protected]>
This commit is contained in:
Christoph Hellwig 2018-04-13 20:38:35 +02:00
commit 3617d9496c
13 changed files with 86 additions and 307 deletions

View file

@ -239,18 +239,6 @@ static int bcm_proc_show(struct seq_file *m, void *v)
seq_putc(m, '\n');
return 0;
}
static int bcm_proc_open(struct inode *inode, struct file *file)
{
return single_open_net(inode, file, bcm_proc_show);
}
static const struct file_operations bcm_proc_fops = {
.open = bcm_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release_net,
};
#endif /* CONFIG_PROC_FS */
/*
@ -1606,9 +1594,9 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,
if (net->can.bcmproc_dir) {
/* unique socket address as filename */
sprintf(bo->procname, "%lu", sock_i_ino(sk));
bo->bcm_proc_read = proc_create_data(bo->procname, 0644,
bo->bcm_proc_read = proc_create_net_single(bo->procname, 0644,
net->can.bcmproc_dir,
&bcm_proc_fops, sk);
bcm_proc_show, sk);
if (!bo->bcm_proc_read) {
ret = -ENOMEM;
goto fail;

View file

@ -270,18 +270,6 @@ static int can_stats_proc_show(struct seq_file *m, void *v)
return 0;
}
static int can_stats_proc_open(struct inode *inode, struct file *file)
{
return single_open_net(inode, file, can_stats_proc_show);
}
static const struct file_operations can_stats_proc_fops = {
.open = can_stats_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release_net,
};
static int can_reset_stats_proc_show(struct seq_file *m, void *v)
{
struct net *net = m->private;
@ -303,36 +291,12 @@ static int can_reset_stats_proc_show(struct seq_file *m, void *v)
return 0;
}
static int can_reset_stats_proc_open(struct inode *inode, struct file *file)
{
return single_open_net(inode, file, can_reset_stats_proc_show);
}
static const struct file_operations can_reset_stats_proc_fops = {
.open = can_reset_stats_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static int can_version_proc_show(struct seq_file *m, void *v)
{
seq_printf(m, "%s\n", CAN_VERSION_STRING);
return 0;
}
static int can_version_proc_open(struct inode *inode, struct file *file)
{
return single_open_net(inode, file, can_version_proc_show);
}
static const struct file_operations can_version_proc_fops = {
.open = can_version_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static inline void can_rcvlist_proc_show_one(struct seq_file *m, int idx,
struct net_device *dev,
struct can_dev_rcv_lists *d)
@ -373,18 +337,6 @@ static int can_rcvlist_proc_show(struct seq_file *m, void *v)
return 0;
}
static int can_rcvlist_proc_open(struct inode *inode, struct file *file)
{
return single_open_net(inode, file, can_rcvlist_proc_show);
}
static const struct file_operations can_rcvlist_proc_fops = {
.open = can_rcvlist_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static inline void can_rcvlist_proc_show_array(struct seq_file *m,
struct net_device *dev,
struct hlist_head *rcv_array,
@ -440,19 +392,6 @@ static int can_rcvlist_sff_proc_show(struct seq_file *m, void *v)
return 0;
}
static int can_rcvlist_sff_proc_open(struct inode *inode, struct file *file)
{
return single_open_net(inode, file, can_rcvlist_sff_proc_show);
}
static const struct file_operations can_rcvlist_sff_proc_fops = {
.open = can_rcvlist_sff_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release_net,
};
static int can_rcvlist_eff_proc_show(struct seq_file *m, void *v)
{
struct net_device *dev;
@ -483,18 +422,6 @@ static int can_rcvlist_eff_proc_show(struct seq_file *m, void *v)
return 0;
}
static int can_rcvlist_eff_proc_open(struct inode *inode, struct file *file)
{
return single_open_net(inode, file, can_rcvlist_eff_proc_show);
}
static const struct file_operations can_rcvlist_eff_proc_fops = {
.open = can_rcvlist_eff_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release_net,
};
/*
* can_init_proc - create main CAN proc directory and procfs entries
*/
@ -510,37 +437,29 @@ void can_init_proc(struct net *net)
}
/* own procfs entries from the AF_CAN core */
net->can.pde_version = proc_create(CAN_PROC_VERSION, 0644,
net->can.proc_dir,
&can_version_proc_fops);
net->can.pde_stats = proc_create(CAN_PROC_STATS, 0644,
net->can.proc_dir,
&can_stats_proc_fops);
net->can.pde_reset_stats = proc_create(CAN_PROC_RESET_STATS, 0644,
net->can.proc_dir,
&can_reset_stats_proc_fops);
net->can.pde_rcvlist_err = proc_create_data(CAN_PROC_RCVLIST_ERR, 0644,
net->can.proc_dir,
&can_rcvlist_proc_fops,
(void *)RX_ERR);
net->can.pde_rcvlist_all = proc_create_data(CAN_PROC_RCVLIST_ALL, 0644,
net->can.proc_dir,
&can_rcvlist_proc_fops,
(void *)RX_ALL);
net->can.pde_rcvlist_fil = proc_create_data(CAN_PROC_RCVLIST_FIL, 0644,
net->can.proc_dir,
&can_rcvlist_proc_fops,
(void *)RX_FIL);
net->can.pde_rcvlist_inv = proc_create_data(CAN_PROC_RCVLIST_INV, 0644,
net->can.proc_dir,
&can_rcvlist_proc_fops,
(void *)RX_INV);
net->can.pde_rcvlist_eff = proc_create(CAN_PROC_RCVLIST_EFF, 0644,
net->can.proc_dir,
&can_rcvlist_eff_proc_fops);
net->can.pde_rcvlist_sff = proc_create(CAN_PROC_RCVLIST_SFF, 0644,
net->can.proc_dir,
&can_rcvlist_sff_proc_fops);
net->can.pde_version = proc_create_net_single(CAN_PROC_VERSION, 0644,
net->can.proc_dir, can_version_proc_show, NULL);
net->can.pde_stats = proc_create_net_single(CAN_PROC_STATS, 0644,
net->can.proc_dir, can_stats_proc_show, NULL);
net->can.pde_reset_stats = proc_create_net_single(CAN_PROC_RESET_STATS,
0644, net->can.proc_dir, can_reset_stats_proc_show,
NULL);
net->can.pde_rcvlist_err = proc_create_net_single(CAN_PROC_RCVLIST_ERR,
0644, net->can.proc_dir, can_rcvlist_proc_show,
(void *)RX_ERR);
net->can.pde_rcvlist_all = proc_create_net_single(CAN_PROC_RCVLIST_ALL,
0644, net->can.proc_dir, can_rcvlist_proc_show,
(void *)RX_ALL);
net->can.pde_rcvlist_fil = proc_create_net_single(CAN_PROC_RCVLIST_FIL,
0644, net->can.proc_dir, can_rcvlist_proc_show,
(void *)RX_FIL);
net->can.pde_rcvlist_inv = proc_create_net_single(CAN_PROC_RCVLIST_INV,
0644, net->can.proc_dir, can_rcvlist_proc_show,
(void *)RX_INV);
net->can.pde_rcvlist_eff = proc_create_net_single(CAN_PROC_RCVLIST_EFF,
0644, net->can.proc_dir, can_rcvlist_eff_proc_show, NULL);
net->can.pde_rcvlist_sff = proc_create_net_single(CAN_PROC_RCVLIST_SFF,
0644, net->can.proc_dir, can_rcvlist_sff_proc_show, NULL);
}
/*