Commit 6f8b13bc authored by Daniel Lezcano's avatar Daniel Lezcano Committed by David S. Miller

[NETNS][IPV6] tcp6 - make proc per namespace

Make the proc for tcp6 to be per namespace.
Signed-off-by: default avatarDaniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0c96d8c5
...@@ -595,8 +595,8 @@ extern int ac6_proc_init(void); ...@@ -595,8 +595,8 @@ extern int ac6_proc_init(void);
extern void ac6_proc_exit(void); extern void ac6_proc_exit(void);
extern int raw6_proc_init(void); extern int raw6_proc_init(void);
extern void raw6_proc_exit(void); extern void raw6_proc_exit(void);
extern int tcp6_proc_init(void); extern int tcp6_proc_init(struct net *net);
extern void tcp6_proc_exit(void); extern void tcp6_proc_exit(struct net *net);
extern int udp6_proc_init(struct net *net); extern int udp6_proc_init(struct net *net);
extern void udp6_proc_exit(struct net *net); extern void udp6_proc_exit(struct net *net);
extern int udplite6_proc_init(void); extern int udplite6_proc_init(void);
......
...@@ -1336,8 +1336,8 @@ struct tcp_iter_state { ...@@ -1336,8 +1336,8 @@ struct tcp_iter_state {
struct seq_operations seq_ops; struct seq_operations seq_ops;
}; };
extern int tcp_proc_register(struct tcp_seq_afinfo *afinfo); extern int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo);
extern void tcp_proc_unregister(struct tcp_seq_afinfo *afinfo); extern void tcp_proc_unregister(struct net *net, struct tcp_seq_afinfo *afinfo);
extern struct request_sock_ops tcp_request_sock_ops; extern struct request_sock_ops tcp_request_sock_ops;
extern struct request_sock_ops tcp6_request_sock_ops; extern struct request_sock_ops tcp6_request_sock_ops;
......
...@@ -2253,7 +2253,7 @@ static int tcp_seq_release(struct inode *inode, struct file *file) ...@@ -2253,7 +2253,7 @@ static int tcp_seq_release(struct inode *inode, struct file *file)
return 0; return 0;
} }
int tcp_proc_register(struct tcp_seq_afinfo *afinfo) int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
{ {
int rc = 0; int rc = 0;
struct proc_dir_entry *p; struct proc_dir_entry *p;
...@@ -2266,7 +2266,7 @@ int tcp_proc_register(struct tcp_seq_afinfo *afinfo) ...@@ -2266,7 +2266,7 @@ int tcp_proc_register(struct tcp_seq_afinfo *afinfo)
afinfo->seq_fops->llseek = seq_lseek; afinfo->seq_fops->llseek = seq_lseek;
afinfo->seq_fops->release = tcp_seq_release; afinfo->seq_fops->release = tcp_seq_release;
p = proc_net_fops_create(&init_net, afinfo->name, S_IRUGO, afinfo->seq_fops); p = proc_net_fops_create(net, afinfo->name, S_IRUGO, afinfo->seq_fops);
if (p) if (p)
p->data = afinfo; p->data = afinfo;
else else
...@@ -2274,11 +2274,11 @@ int tcp_proc_register(struct tcp_seq_afinfo *afinfo) ...@@ -2274,11 +2274,11 @@ int tcp_proc_register(struct tcp_seq_afinfo *afinfo)
return rc; return rc;
} }
void tcp_proc_unregister(struct tcp_seq_afinfo *afinfo) void tcp_proc_unregister(struct net *net, struct tcp_seq_afinfo *afinfo)
{ {
if (!afinfo) if (!afinfo)
return; return;
proc_net_remove(&init_net, afinfo->name); proc_net_remove(net, afinfo->name);
memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops)); memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops));
} }
...@@ -2419,12 +2419,12 @@ static struct tcp_seq_afinfo tcp4_seq_afinfo = { ...@@ -2419,12 +2419,12 @@ static struct tcp_seq_afinfo tcp4_seq_afinfo = {
int __init tcp4_proc_init(void) int __init tcp4_proc_init(void)
{ {
return tcp_proc_register(&tcp4_seq_afinfo); return tcp_proc_register(&init_net, &tcp4_seq_afinfo);
} }
void tcp4_proc_exit(void) void tcp4_proc_exit(void)
{ {
tcp_proc_unregister(&tcp4_seq_afinfo); tcp_proc_unregister(&init_net, &tcp4_seq_afinfo);
} }
#endif /* CONFIG_PROC_FS */ #endif /* CONFIG_PROC_FS */
......
...@@ -859,15 +859,25 @@ static int inet6_net_init(struct net *net) ...@@ -859,15 +859,25 @@ static int inet6_net_init(struct net *net)
err = udp6_proc_init(net); err = udp6_proc_init(net);
if (err) if (err)
goto out; goto out;
err = tcp6_proc_init(net);
if (err)
goto proc_tcp6_fail;
out: out:
#endif #endif
return err; return err;
#ifdef CONFIG_PROC_FS
proc_tcp6_fail:
udp6_proc_exit(net);
goto out;
#endif
} }
static void inet6_net_exit(struct net *net) static void inet6_net_exit(struct net *net)
{ {
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
udp6_proc_exit(net); udp6_proc_exit(net);
tcp6_proc_exit(net);
#endif #endif
} }
...@@ -951,8 +961,6 @@ static int __init inet6_init(void) ...@@ -951,8 +961,6 @@ static int __init inet6_init(void)
err = -ENOMEM; err = -ENOMEM;
if (raw6_proc_init()) if (raw6_proc_init())
goto proc_raw6_fail; goto proc_raw6_fail;
if (tcp6_proc_init())
goto proc_tcp6_fail;
if (udplite6_proc_init()) if (udplite6_proc_init())
goto proc_udplite6_fail; goto proc_udplite6_fail;
if (ipv6_misc_proc_init()) if (ipv6_misc_proc_init())
...@@ -1037,8 +1045,6 @@ proc_anycast6_fail: ...@@ -1037,8 +1045,6 @@ proc_anycast6_fail:
proc_misc6_fail: proc_misc6_fail:
udplite6_proc_exit(); udplite6_proc_exit();
proc_udplite6_fail: proc_udplite6_fail:
tcp6_proc_exit();
proc_tcp6_fail:
raw6_proc_exit(); raw6_proc_exit();
proc_raw6_fail: proc_raw6_fail:
#endif #endif
...@@ -1098,7 +1104,6 @@ static void __exit inet6_exit(void) ...@@ -1098,7 +1104,6 @@ static void __exit inet6_exit(void)
ac6_proc_exit(); ac6_proc_exit();
ipv6_misc_proc_exit(); ipv6_misc_proc_exit();
udplite6_proc_exit(); udplite6_proc_exit();
tcp6_proc_exit();
raw6_proc_exit(); raw6_proc_exit();
#endif #endif
ipv6_netfilter_fini(); ipv6_netfilter_fini();
......
...@@ -2129,14 +2129,14 @@ static struct tcp_seq_afinfo tcp6_seq_afinfo = { ...@@ -2129,14 +2129,14 @@ static struct tcp_seq_afinfo tcp6_seq_afinfo = {
.seq_fops = &tcp6_seq_fops, .seq_fops = &tcp6_seq_fops,
}; };
int __init tcp6_proc_init(void) int tcp6_proc_init(struct net *net)
{ {
return tcp_proc_register(&tcp6_seq_afinfo); return tcp_proc_register(net, &tcp6_seq_afinfo);
} }
void tcp6_proc_exit(void) void tcp6_proc_exit(struct net *net)
{ {
tcp_proc_unregister(&tcp6_seq_afinfo); tcp_proc_unregister(net, &tcp6_seq_afinfo);
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment