proc: introduce proc_create_net{,_data}
Variants of proc_create{,_data} that directly take a struct seq_operations and deal with network namespaces in ->open and ->release. All callers of proc_create + seq_open_net converted over, and seq_{open,release}_net are removed entirely. Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -4254,22 +4254,10 @@ static const struct seq_operations if6_seq_ops = {
|
||||
.stop = if6_seq_stop,
|
||||
};
|
||||
|
||||
static int if6_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &if6_seq_ops,
|
||||
sizeof(struct if6_iter_state));
|
||||
}
|
||||
|
||||
static const struct file_operations if6_fops = {
|
||||
.open = if6_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
static int __net_init if6_proc_net_init(struct net *net)
|
||||
{
|
||||
if (!proc_create("if_inet6", 0444, net->proc_net, &if6_fops))
|
||||
if (!proc_create_net("if_inet6", 0444, net->proc_net, &if6_seq_ops,
|
||||
sizeof(struct if6_iter_state)))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -529,22 +529,10 @@ static const struct seq_operations ac6_seq_ops = {
|
||||
.show = ac6_seq_show,
|
||||
};
|
||||
|
||||
static int ac6_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &ac6_seq_ops,
|
||||
sizeof(struct ac6_iter_state));
|
||||
}
|
||||
|
||||
static const struct file_operations ac6_seq_fops = {
|
||||
.open = ac6_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
int __net_init ac6_proc_init(struct net *net)
|
||||
{
|
||||
if (!proc_create("anycast6", 0444, net->proc_net, &ac6_seq_fops))
|
||||
if (!proc_create_net("anycast6", 0444, net->proc_net, &ac6_seq_ops,
|
||||
sizeof(struct ac6_iter_state)))
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
|
@@ -2209,15 +2209,6 @@ void fib6_gc_cleanup(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
||||
struct ipv6_route_iter {
|
||||
struct seq_net_private p;
|
||||
struct fib6_walker w;
|
||||
loff_t skip;
|
||||
struct fib6_table *tbl;
|
||||
int sernum;
|
||||
};
|
||||
|
||||
static int ipv6_route_seq_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
struct rt6_info *rt = v;
|
||||
@@ -2383,17 +2374,10 @@ static void ipv6_route_seq_stop(struct seq_file *seq, void *v)
|
||||
rcu_read_unlock_bh();
|
||||
}
|
||||
|
||||
static const struct seq_operations ipv6_route_seq_ops = {
|
||||
const struct seq_operations ipv6_route_seq_ops = {
|
||||
.start = ipv6_route_seq_start,
|
||||
.next = ipv6_route_seq_next,
|
||||
.stop = ipv6_route_seq_stop,
|
||||
.show = ipv6_route_seq_show
|
||||
};
|
||||
|
||||
int ipv6_route_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &ipv6_route_seq_ops,
|
||||
sizeof(struct ipv6_route_iter));
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
|
@@ -812,23 +812,10 @@ static const struct seq_operations ip6fl_seq_ops = {
|
||||
.show = ip6fl_seq_show,
|
||||
};
|
||||
|
||||
static int ip6fl_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &ip6fl_seq_ops,
|
||||
sizeof(struct ip6fl_iter_state));
|
||||
}
|
||||
|
||||
static const struct file_operations ip6fl_seq_fops = {
|
||||
.open = ip6fl_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
static int __net_init ip6_flowlabel_proc_init(struct net *net)
|
||||
{
|
||||
if (!proc_create("ip6_flowlabel", 0444, net->proc_net,
|
||||
&ip6fl_seq_fops))
|
||||
if (!proc_create_net("ip6_flowlabel", 0444, net->proc_net,
|
||||
&ip6fl_seq_ops, sizeof(struct ip6fl_iter_state)))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -439,19 +439,6 @@ static const struct seq_operations ip6mr_vif_seq_ops = {
|
||||
.show = ip6mr_vif_seq_show,
|
||||
};
|
||||
|
||||
static int ip6mr_vif_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &ip6mr_vif_seq_ops,
|
||||
sizeof(struct mr_vif_iter));
|
||||
}
|
||||
|
||||
static const struct file_operations ip6mr_vif_fops = {
|
||||
.open = ip6mr_vif_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
|
||||
{
|
||||
struct net *net = seq_file_net(seq);
|
||||
@@ -512,19 +499,6 @@ static const struct seq_operations ipmr_mfc_seq_ops = {
|
||||
.stop = mr_mfc_seq_stop,
|
||||
.show = ipmr_mfc_seq_show,
|
||||
};
|
||||
|
||||
static int ipmr_mfc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &ipmr_mfc_seq_ops,
|
||||
sizeof(struct mr_mfc_iter));
|
||||
}
|
||||
|
||||
static const struct file_operations ip6mr_mfc_fops = {
|
||||
.open = ipmr_mfc_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_IPV6_PIMSM_V2
|
||||
@@ -1316,9 +1290,11 @@ static int __net_init ip6mr_net_init(struct net *net)
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
err = -ENOMEM;
|
||||
if (!proc_create("ip6_mr_vif", 0, net->proc_net, &ip6mr_vif_fops))
|
||||
if (!proc_create_net("ip6_mr_vif", 0, net->proc_net, &ip6mr_vif_seq_ops,
|
||||
sizeof(struct mr_vif_iter)))
|
||||
goto proc_vif_fail;
|
||||
if (!proc_create("ip6_mr_cache", 0, net->proc_net, &ip6mr_mfc_fops))
|
||||
if (!proc_create_net("ip6_mr_cache", 0, net->proc_net, &ipmr_mfc_seq_ops,
|
||||
sizeof(struct mr_mfc_iter)))
|
||||
goto proc_cache_fail;
|
||||
#endif
|
||||
|
||||
|
@@ -2749,19 +2749,6 @@ static const struct seq_operations igmp6_mc_seq_ops = {
|
||||
.show = igmp6_mc_seq_show,
|
||||
};
|
||||
|
||||
static int igmp6_mc_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &igmp6_mc_seq_ops,
|
||||
sizeof(struct igmp6_mc_iter_state));
|
||||
}
|
||||
|
||||
static const struct file_operations igmp6_mc_seq_fops = {
|
||||
.open = igmp6_mc_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
struct igmp6_mcf_iter_state {
|
||||
struct seq_net_private p;
|
||||
struct net_device *dev;
|
||||
@@ -2903,28 +2890,17 @@ static const struct seq_operations igmp6_mcf_seq_ops = {
|
||||
.show = igmp6_mcf_seq_show,
|
||||
};
|
||||
|
||||
static int igmp6_mcf_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &igmp6_mcf_seq_ops,
|
||||
sizeof(struct igmp6_mcf_iter_state));
|
||||
}
|
||||
|
||||
static const struct file_operations igmp6_mcf_seq_fops = {
|
||||
.open = igmp6_mcf_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
static int __net_init igmp6_proc_init(struct net *net)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = -ENOMEM;
|
||||
if (!proc_create("igmp6", 0444, net->proc_net, &igmp6_mc_seq_fops))
|
||||
if (!proc_create_net("igmp6", 0444, net->proc_net, &igmp6_mc_seq_ops,
|
||||
sizeof(struct igmp6_mc_iter_state)))
|
||||
goto out;
|
||||
if (!proc_create("mcfilter6", 0444, net->proc_net,
|
||||
&igmp6_mcf_seq_fops))
|
||||
if (!proc_create_net("mcfilter6", 0444, net->proc_net,
|
||||
&igmp6_mcf_seq_ops,
|
||||
sizeof(struct igmp6_mcf_iter_state)))
|
||||
goto out_proc_net_igmp6;
|
||||
|
||||
err = 0;
|
||||
|
@@ -223,22 +223,10 @@ static const struct seq_operations ping_v6_seq_ops = {
|
||||
.stop = ping_seq_stop,
|
||||
};
|
||||
|
||||
static int ping_v6_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &ping_v6_seq_ops,
|
||||
sizeof(struct ping_iter_state));
|
||||
}
|
||||
|
||||
const struct file_operations ping_v6_seq_fops = {
|
||||
.open = ping_v6_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
static int __net_init ping_v6_proc_init_net(struct net *net)
|
||||
{
|
||||
if (!proc_create("icmp6", 0444, net->proc_net, &ping_v6_seq_fops))
|
||||
if (!proc_create_net("icmp6", 0444, net->proc_net, &ping_v6_seq_ops,
|
||||
sizeof(struct ping_iter_state)))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1304,23 +1304,10 @@ static const struct seq_operations raw6_seq_ops = {
|
||||
.show = raw6_seq_show,
|
||||
};
|
||||
|
||||
static int raw6_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &raw6_seq_ops,
|
||||
sizeof(struct raw_iter_state));
|
||||
}
|
||||
|
||||
static const struct file_operations raw6_seq_fops = {
|
||||
.open = raw6_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
static int __net_init raw6_init_net(struct net *net)
|
||||
{
|
||||
if (!proc_create_data("raw6", 0444, net->proc_net, &raw6_seq_fops,
|
||||
&raw_v6_hashinfo))
|
||||
if (!proc_create_net_data("raw6", 0444, net->proc_net, &raw6_seq_ops,
|
||||
sizeof(struct raw_iter_state), &raw_v6_hashinfo))
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
|
@@ -4862,14 +4862,6 @@ static int ip6_route_dev_notify(struct notifier_block *this,
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
||||
static const struct file_operations ipv6_route_proc_fops = {
|
||||
.open = ipv6_route_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net,
|
||||
};
|
||||
|
||||
static int rt6_stats_seq_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
struct net *net = (struct net *)seq->private;
|
||||
@@ -5100,7 +5092,8 @@ static void __net_exit ip6_route_net_exit(struct net *net)
|
||||
static int __net_init ip6_route_net_init_late(struct net *net)
|
||||
{
|
||||
#ifdef CONFIG_PROC_FS
|
||||
proc_create("ipv6_route", 0, net->proc_net, &ipv6_route_proc_fops);
|
||||
proc_create_net("ipv6_route", 0, net->proc_net, &ipv6_route_seq_ops,
|
||||
sizeof(struct ipv6_route_iter));
|
||||
proc_create("rt6_stats", 0444, net->proc_net, &rt6_stats_seq_fops);
|
||||
#endif
|
||||
return 0;
|
||||
|
@@ -1916,27 +1916,14 @@ static const struct seq_operations tcp6_seq_ops = {
|
||||
.stop = tcp_seq_stop,
|
||||
};
|
||||
|
||||
static int tcp6_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &tcp6_seq_ops,
|
||||
sizeof(struct tcp_iter_state));
|
||||
}
|
||||
|
||||
static const struct file_operations tcp6_afinfo_seq_fops = {
|
||||
.open = tcp6_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net
|
||||
};
|
||||
|
||||
static struct tcp_seq_afinfo tcp6_seq_afinfo = {
|
||||
.family = AF_INET6,
|
||||
};
|
||||
|
||||
int __net_init tcp6_proc_init(struct net *net)
|
||||
{
|
||||
if (!proc_create_data("tcp6", 0444, net->proc_net,
|
||||
&tcp6_afinfo_seq_fops, &tcp6_seq_afinfo))
|
||||
if (!proc_create_net_data("tcp6", 0444, net->proc_net, &tcp6_seq_ops,
|
||||
sizeof(struct tcp_iter_state), &tcp6_seq_afinfo))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1480,26 +1480,13 @@ int udp6_seq_show(struct seq_file *seq, void *v)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct seq_operations udp6_seq_ops = {
|
||||
const struct seq_operations udp6_seq_ops = {
|
||||
.start = udp_seq_start,
|
||||
.next = udp_seq_next,
|
||||
.stop = udp_seq_stop,
|
||||
.show = udp6_seq_show,
|
||||
};
|
||||
|
||||
static int udp6_seq_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_net(inode, file, &udp6_seq_ops,
|
||||
sizeof(struct udp_iter_state));
|
||||
}
|
||||
|
||||
const struct file_operations udp6_afinfo_seq_fops = {
|
||||
.open = udp6_seq_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release_net
|
||||
};
|
||||
EXPORT_SYMBOL(udp6_afinfo_seq_fops);
|
||||
EXPORT_SYMBOL(udp6_seq_ops);
|
||||
|
||||
static struct udp_seq_afinfo udp6_seq_afinfo = {
|
||||
.family = AF_INET6,
|
||||
@@ -1508,8 +1495,8 @@ static struct udp_seq_afinfo udp6_seq_afinfo = {
|
||||
|
||||
int __net_init udp6_proc_init(struct net *net)
|
||||
{
|
||||
if (!proc_create_data("udp6", 0444, net->proc_net,
|
||||
&udp6_afinfo_seq_fops, &udp6_seq_afinfo))
|
||||
if (!proc_create_net_data("udp6", 0444, net->proc_net, &udp6_seq_ops,
|
||||
sizeof(struct udp_iter_state), &udp6_seq_afinfo))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -100,8 +100,9 @@ static struct udp_seq_afinfo udplite6_seq_afinfo = {
|
||||
|
||||
static int __net_init udplite6_proc_init_net(struct net *net)
|
||||
{
|
||||
if (!proc_create_data("udplite6", 0444, net->proc_net,
|
||||
&udp6_afinfo_seq_fops, &udplite6_seq_afinfo))
|
||||
if (!proc_create_net_data("udplite6", 0444, net->proc_net,
|
||||
&udp6_seq_ops, sizeof(struct udp_iter_state),
|
||||
&udplite6_seq_afinfo))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user