aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2008-07-18 07:07:44 -0400
committerDavid S. Miller <davem@davemloft.net>2008-07-18 07:07:44 -0400
commitb6fcbdb4f283f7ba67cec3cda6be23da8e959031 (patch)
tree45d72a4a5d0cce9ab2c98321f4d7d122bf982a55
parentde05c557b24c7dffc6d392e3db120cf11c9f6ae7 (diff)
proc: consolidate per-net single-release callers
They are symmetrical to single_open ones :) Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--fs/proc/proc_net.c8
-rw-r--r--include/linux/seq_file_net.h1
-rw-r--r--net/ipv4/fib_trie.c9
-rw-r--r--net/ipv4/proc.c30
-rw-r--r--net/ipv6/proc.c10
-rw-r--r--net/ipv6/route.c20
6 files changed, 16 insertions, 62 deletions
diff --git a/fs/proc/proc_net.c b/fs/proc/proc_net.c
index ab232ad2e6f9..b224a28e0c15 100644
--- a/fs/proc/proc_net.c
+++ b/fs/proc/proc_net.c
@@ -87,6 +87,14 @@ int seq_release_net(struct inode *ino, struct file *f)
87} 87}
88EXPORT_SYMBOL_GPL(seq_release_net); 88EXPORT_SYMBOL_GPL(seq_release_net);
89 89
90int single_release_net(struct inode *ino, struct file *f)
91{
92 struct seq_file *seq = f->private_data;
93 put_net(seq->private);
94 return single_release(ino, f);
95}
96EXPORT_SYMBOL_GPL(single_release_net);
97
90static struct net *get_proc_task_net(struct inode *dir) 98static struct net *get_proc_task_net(struct inode *dir)
91{ 99{
92 struct task_struct *task; 100 struct task_struct *task;
diff --git a/include/linux/seq_file_net.h b/include/linux/seq_file_net.h
index 87dcc0ecf6eb..32c89bbe24a2 100644
--- a/include/linux/seq_file_net.h
+++ b/include/linux/seq_file_net.h
@@ -17,6 +17,7 @@ int seq_open_net(struct inode *, struct file *,
17int single_open_net(struct inode *, struct file *file, 17int single_open_net(struct inode *, struct file *file,
18 int (*show)(struct seq_file *, void *)); 18 int (*show)(struct seq_file *, void *));
19int seq_release_net(struct inode *, struct file *); 19int seq_release_net(struct inode *, struct file *);
20int single_release_net(struct inode *, struct file *);
20static inline struct net *seq_file_net(struct seq_file *seq) 21static inline struct net *seq_file_net(struct seq_file *seq)
21{ 22{
22#ifdef CONFIG_NET_NS 23#ifdef CONFIG_NET_NS
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 6009df238ed9..5cb72786a8af 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -2254,19 +2254,12 @@ static int fib_triestat_seq_open(struct inode *inode, struct file *file)
2254 return single_open_net(inode, file, fib_triestat_seq_show); 2254 return single_open_net(inode, file, fib_triestat_seq_show);
2255} 2255}
2256 2256
2257static int fib_triestat_seq_release(struct inode *ino, struct file *f)
2258{
2259 struct seq_file *seq = f->private_data;
2260 put_net(seq->private);
2261 return single_release(ino, f);
2262}
2263
2264static const struct file_operations fib_triestat_fops = { 2257static const struct file_operations fib_triestat_fops = {
2265 .owner = THIS_MODULE, 2258 .owner = THIS_MODULE,
2266 .open = fib_triestat_seq_open, 2259 .open = fib_triestat_seq_open,
2267 .read = seq_read, 2260 .read = seq_read,
2268 .llseek = seq_lseek, 2261 .llseek = seq_lseek,
2269 .release = fib_triestat_seq_release, 2262 .release = single_release_net,
2270}; 2263};
2271 2264
2272static struct node *fib_trie_get_idx(struct seq_file *seq, loff_t pos) 2265static struct node *fib_trie_get_idx(struct seq_file *seq, loff_t pos)
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
index daf5d3c80cef..834356ea99df 100644
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -74,20 +74,12 @@ static int sockstat_seq_open(struct inode *inode, struct file *file)
74 return single_open_net(inode, file, sockstat_seq_show); 74 return single_open_net(inode, file, sockstat_seq_show);
75} 75}
76 76
77static int sockstat_seq_release(struct inode *inode, struct file *file)
78{
79 struct net *net = ((struct seq_file *)file->private_data)->private;
80
81 put_net(net);
82 return single_release(inode, file);
83}
84
85static const struct file_operations sockstat_seq_fops = { 77static const struct file_operations sockstat_seq_fops = {
86 .owner = THIS_MODULE, 78 .owner = THIS_MODULE,
87 .open = sockstat_seq_open, 79 .open = sockstat_seq_open,
88 .read = seq_read, 80 .read = seq_read,
89 .llseek = seq_lseek, 81 .llseek = seq_lseek,
90 .release = sockstat_seq_release, 82 .release = single_release_net,
91}; 83};
92 84
93/* snmp items */ 85/* snmp items */
@@ -383,20 +375,12 @@ static int snmp_seq_open(struct inode *inode, struct file *file)
383 return single_open_net(inode, file, snmp_seq_show); 375 return single_open_net(inode, file, snmp_seq_show);
384} 376}
385 377
386static int snmp_seq_release(struct inode *inode, struct file *file)
387{
388 struct net *net = ((struct seq_file *)file->private_data)->private;
389
390 put_net(net);
391 return single_release(inode, file);
392}
393
394static const struct file_operations snmp_seq_fops = { 378static const struct file_operations snmp_seq_fops = {
395 .owner = THIS_MODULE, 379 .owner = THIS_MODULE,
396 .open = snmp_seq_open, 380 .open = snmp_seq_open,
397 .read = seq_read, 381 .read = seq_read,
398 .llseek = seq_lseek, 382 .llseek = seq_lseek,
399 .release = snmp_seq_release, 383 .release = single_release_net,
400}; 384};
401 385
402 386
@@ -438,20 +422,12 @@ static int netstat_seq_open(struct inode *inode, struct file *file)
438 return single_open_net(inode, file, netstat_seq_show); 422 return single_open_net(inode, file, netstat_seq_show);
439} 423}
440 424
441static int netstat_seq_release(struct inode *inode, struct file *file)
442{
443 struct net *net = ((struct seq_file *)file->private_data)->private;
444
445 put_net(net);
446 return single_release(inode, file);
447}
448
449static const struct file_operations netstat_seq_fops = { 425static const struct file_operations netstat_seq_fops = {
450 .owner = THIS_MODULE, 426 .owner = THIS_MODULE,
451 .open = netstat_seq_open, 427 .open = netstat_seq_open,
452 .read = seq_read, 428 .read = seq_read,
453 .llseek = seq_lseek, 429 .llseek = seq_lseek,
454 .release = netstat_seq_release, 430 .release = single_release_net,
455}; 431};
456 432
457static __net_init int ip_proc_init_net(struct net *net) 433static __net_init int ip_proc_init_net(struct net *net)
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 29c5a79444c2..70940b3654a1 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -186,20 +186,12 @@ static int sockstat6_seq_open(struct inode *inode, struct file *file)
186 return single_open_net(inode, file, sockstat6_seq_show); 186 return single_open_net(inode, file, sockstat6_seq_show);
187} 187}
188 188
189static int sockstat6_seq_release(struct inode *inode, struct file *file)
190{
191 struct net *net = ((struct seq_file *)file->private_data)->private;
192
193 put_net(net);
194 return single_release(inode, file);
195}
196
197static const struct file_operations sockstat6_seq_fops = { 189static const struct file_operations sockstat6_seq_fops = {
198 .owner = THIS_MODULE, 190 .owner = THIS_MODULE,
199 .open = sockstat6_seq_open, 191 .open = sockstat6_seq_open,
200 .read = seq_read, 192 .read = seq_read,
201 .llseek = seq_lseek, 193 .llseek = seq_lseek,
202 .release = sockstat6_seq_release, 194 .release = single_release_net,
203}; 195};
204 196
205static int snmp6_seq_open(struct inode *inode, struct file *file) 197static int snmp6_seq_open(struct inode *inode, struct file *file)
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index fb7ff8f0c6db..cb8a51271b67 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2419,20 +2419,12 @@ static int ipv6_route_open(struct inode *inode, struct file *file)
2419 return single_open_net(inode, file, ipv6_route_show); 2419 return single_open_net(inode, file, ipv6_route_show);
2420} 2420}
2421 2421
2422static int ipv6_route_release(struct inode *inode, struct file *file)
2423{
2424 struct seq_file *seq = file->private_data;
2425 struct net *net = seq->private;
2426 put_net(net);
2427 return single_release(inode, file);
2428}
2429
2430static const struct file_operations ipv6_route_proc_fops = { 2422static const struct file_operations ipv6_route_proc_fops = {
2431 .owner = THIS_MODULE, 2423 .owner = THIS_MODULE,
2432 .open = ipv6_route_open, 2424 .open = ipv6_route_open,
2433 .read = seq_read, 2425 .read = seq_read,
2434 .llseek = seq_lseek, 2426 .llseek = seq_lseek,
2435 .release = ipv6_route_release, 2427 .release = single_release_net,
2436}; 2428};
2437 2429
2438static int rt6_stats_seq_show(struct seq_file *seq, void *v) 2430static int rt6_stats_seq_show(struct seq_file *seq, void *v)
@@ -2455,20 +2447,12 @@ static int rt6_stats_seq_open(struct inode *inode, struct file *file)
2455 return single_open_net(inode, file, rt6_stats_seq_show); 2447 return single_open_net(inode, file, rt6_stats_seq_show);
2456} 2448}
2457 2449
2458static int rt6_stats_seq_release(struct inode *inode, struct file *file)
2459{
2460 struct seq_file *seq = file->private_data;
2461 struct net *net = (struct net *)seq->private;
2462 put_net(net);
2463 return single_release(inode, file);
2464}
2465
2466static const struct file_operations rt6_stats_seq_fops = { 2450static const struct file_operations rt6_stats_seq_fops = {
2467 .owner = THIS_MODULE, 2451 .owner = THIS_MODULE,
2468 .open = rt6_stats_seq_open, 2452 .open = rt6_stats_seq_open,
2469 .read = seq_read, 2453 .read = seq_read,
2470 .llseek = seq_lseek, 2454 .llseek = seq_lseek,
2471 .release = rt6_stats_seq_release, 2455 .release = single_release_net,
2472}; 2456};
2473#endif /* CONFIG_PROC_FS */ 2457#endif /* CONFIG_PROC_FS */
2474 2458