Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Pavel Emelyanov and committed by
David S. Miller
b6fcbdb4 de05c557

+16 -62
+8
fs/proc/proc_net.c
··· 87 87 } 88 88 EXPORT_SYMBOL_GPL(seq_release_net); 89 89 90 + int 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 + } 96 + EXPORT_SYMBOL_GPL(single_release_net); 97 + 90 98 static struct net *get_proc_task_net(struct inode *dir) 91 99 { 92 100 struct task_struct *task;
+1
include/linux/seq_file_net.h
··· 17 17 int single_open_net(struct inode *, struct file *file, 18 18 int (*show)(struct seq_file *, void *)); 19 19 int seq_release_net(struct inode *, struct file *); 20 + int single_release_net(struct inode *, struct file *); 20 21 static inline struct net *seq_file_net(struct seq_file *seq) 21 22 { 22 23 #ifdef CONFIG_NET_NS
+1 -8
net/ipv4/fib_trie.c
··· 2254 2254 return single_open_net(inode, file, fib_triestat_seq_show); 2255 2255 } 2256 2256 2257 - static 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 - 2264 2257 static const struct file_operations fib_triestat_fops = { 2265 2258 .owner = THIS_MODULE, 2266 2259 .open = fib_triestat_seq_open, 2267 2260 .read = seq_read, 2268 2261 .llseek = seq_lseek, 2269 - .release = fib_triestat_seq_release, 2262 + .release = single_release_net, 2270 2263 }; 2271 2264 2272 2265 static struct node *fib_trie_get_idx(struct seq_file *seq, loff_t pos)
+3 -27
net/ipv4/proc.c
··· 74 74 return single_open_net(inode, file, sockstat_seq_show); 75 75 } 76 76 77 - static 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 - 85 77 static const struct file_operations sockstat_seq_fops = { 86 78 .owner = THIS_MODULE, 87 79 .open = sockstat_seq_open, 88 80 .read = seq_read, 89 81 .llseek = seq_lseek, 90 - .release = sockstat_seq_release, 82 + .release = single_release_net, 91 83 }; 92 84 93 85 /* snmp items */ ··· 375 383 return single_open_net(inode, file, snmp_seq_show); 376 384 } 377 385 378 - static int snmp_seq_release(struct inode *inode, struct file *file) 379 - { 380 - struct net *net = ((struct seq_file *)file->private_data)->private; 381 - 382 - put_net(net); 383 - return single_release(inode, file); 384 - } 385 - 386 386 static const struct file_operations snmp_seq_fops = { 387 387 .owner = THIS_MODULE, 388 388 .open = snmp_seq_open, 389 389 .read = seq_read, 390 390 .llseek = seq_lseek, 391 - .release = snmp_seq_release, 391 + .release = single_release_net, 392 392 }; 393 393 394 394 ··· 422 438 return single_open_net(inode, file, netstat_seq_show); 423 439 } 424 440 425 - static int netstat_seq_release(struct inode *inode, struct file *file) 426 - { 427 - struct net *net = ((struct seq_file *)file->private_data)->private; 428 - 429 - put_net(net); 430 - return single_release(inode, file); 431 - } 432 - 433 441 static const struct file_operations netstat_seq_fops = { 434 442 .owner = THIS_MODULE, 435 443 .open = netstat_seq_open, 436 444 .read = seq_read, 437 445 .llseek = seq_lseek, 438 - .release = netstat_seq_release, 446 + .release = single_release_net, 439 447 }; 440 448 441 449 static __net_init int ip_proc_init_net(struct net *net)
+1 -9
net/ipv6/proc.c
··· 186 186 return single_open_net(inode, file, sockstat6_seq_show); 187 187 } 188 188 189 - static 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 - 197 189 static const struct file_operations sockstat6_seq_fops = { 198 190 .owner = THIS_MODULE, 199 191 .open = sockstat6_seq_open, 200 192 .read = seq_read, 201 193 .llseek = seq_lseek, 202 - .release = sockstat6_seq_release, 194 + .release = single_release_net, 203 195 }; 204 196 205 197 static int snmp6_seq_open(struct inode *inode, struct file *file)
+2 -18
net/ipv6/route.c
··· 2419 2419 return single_open_net(inode, file, ipv6_route_show); 2420 2420 } 2421 2421 2422 - static 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 - 2430 2422 static const struct file_operations ipv6_route_proc_fops = { 2431 2423 .owner = THIS_MODULE, 2432 2424 .open = ipv6_route_open, 2433 2425 .read = seq_read, 2434 2426 .llseek = seq_lseek, 2435 - .release = ipv6_route_release, 2427 + .release = single_release_net, 2436 2428 }; 2437 2429 2438 2430 static int rt6_stats_seq_show(struct seq_file *seq, void *v) ··· 2447 2455 return single_open_net(inode, file, rt6_stats_seq_show); 2448 2456 } 2449 2457 2450 - static int rt6_stats_seq_release(struct inode *inode, struct file *file) 2451 - { 2452 - struct seq_file *seq = file->private_data; 2453 - struct net *net = (struct net *)seq->private; 2454 - put_net(net); 2455 - return single_release(inode, file); 2456 - } 2457 - 2458 2458 static const struct file_operations rt6_stats_seq_fops = { 2459 2459 .owner = THIS_MODULE, 2460 2460 .open = rt6_stats_seq_open, 2461 2461 .read = seq_read, 2462 2462 .llseek = seq_lseek, 2463 - .release = rt6_stats_seq_release, 2463 + .release = single_release_net, 2464 2464 }; 2465 2465 #endif /* CONFIG_PROC_FS */ 2466 2466