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

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>

+202 -939
+2 -16
drivers/net/ppp/pppoe.c
··· 1096 1096 .stop = pppoe_seq_stop, 1097 1097 .show = pppoe_seq_show, 1098 1098 }; 1099 - 1100 - static int pppoe_seq_open(struct inode *inode, struct file *file) 1101 - { 1102 - return seq_open_net(inode, file, &pppoe_seq_ops, 1103 - sizeof(struct seq_net_private)); 1104 - } 1105 - 1106 - static const struct file_operations pppoe_seq_fops = { 1107 - .owner = THIS_MODULE, 1108 - .open = pppoe_seq_open, 1109 - .read = seq_read, 1110 - .llseek = seq_lseek, 1111 - .release = seq_release_net, 1112 - }; 1113 - 1114 1099 #endif /* CONFIG_PROC_FS */ 1115 1100 1116 1101 static const struct proto_ops pppoe_ops = { ··· 1131 1146 1132 1147 rwlock_init(&pn->hash_lock); 1133 1148 1134 - pde = proc_create("pppoe", 0444, net->proc_net, &pppoe_seq_fops); 1149 + pde = proc_create_net("pppoe", 0444, net->proc_net, 1150 + &pppoe_seq_ops, sizeof(struct seq_net_private)); 1135 1151 #ifdef CONFIG_PROC_FS 1136 1152 if (!pde) 1137 1153 return -ENOMEM;
+4 -39
fs/nfs/client.c
··· 1067 1067 } 1068 1068 1069 1069 #ifdef CONFIG_PROC_FS 1070 - static int nfs_server_list_open(struct inode *inode, struct file *file); 1071 1070 static void *nfs_server_list_start(struct seq_file *p, loff_t *pos); 1072 1071 static void *nfs_server_list_next(struct seq_file *p, void *v, loff_t *pos); 1073 1072 static void nfs_server_list_stop(struct seq_file *p, void *v); ··· 1079 1080 .show = nfs_server_list_show, 1080 1081 }; 1081 1082 1082 - static const struct file_operations nfs_server_list_fops = { 1083 - .open = nfs_server_list_open, 1084 - .read = seq_read, 1085 - .llseek = seq_lseek, 1086 - .release = seq_release_net, 1087 - }; 1088 - 1089 - static int nfs_volume_list_open(struct inode *inode, struct file *file); 1090 1083 static void *nfs_volume_list_start(struct seq_file *p, loff_t *pos); 1091 1084 static void *nfs_volume_list_next(struct seq_file *p, void *v, loff_t *pos); 1092 1085 static void nfs_volume_list_stop(struct seq_file *p, void *v); ··· 1090 1099 .stop = nfs_volume_list_stop, 1091 1100 .show = nfs_volume_list_show, 1092 1101 }; 1093 - 1094 - static const struct file_operations nfs_volume_list_fops = { 1095 - .open = nfs_volume_list_open, 1096 - .read = seq_read, 1097 - .llseek = seq_lseek, 1098 - .release = seq_release_net, 1099 - }; 1100 - 1101 - /* 1102 - * open "/proc/fs/nfsfs/servers" which provides a summary of servers with which 1103 - * we're dealing 1104 - */ 1105 - static int nfs_server_list_open(struct inode *inode, struct file *file) 1106 - { 1107 - return seq_open_net(inode, file, &nfs_server_list_ops, 1108 - sizeof(struct seq_net_private)); 1109 - } 1110 1102 1111 1103 /* 1112 1104 * set up the iterator to start reading from the server list and return the first item ··· 1156 1182 rcu_read_unlock(); 1157 1183 1158 1184 return 0; 1159 - } 1160 - 1161 - /* 1162 - * open "/proc/fs/nfsfs/volumes" which provides a summary of extant volumes 1163 - */ 1164 - static int nfs_volume_list_open(struct inode *inode, struct file *file) 1165 - { 1166 - return seq_open_net(inode, file, &nfs_volume_list_ops, 1167 - sizeof(struct seq_net_private)); 1168 1185 } 1169 1186 1170 1187 /* ··· 1243 1278 goto error_0; 1244 1279 1245 1280 /* a file of servers with which we're dealing */ 1246 - p = proc_create("servers", S_IFREG|S_IRUGO, 1247 - nn->proc_nfsfs, &nfs_server_list_fops); 1281 + p = proc_create_net("servers", S_IFREG|S_IRUGO, nn->proc_nfsfs, 1282 + &nfs_server_list_ops, sizeof(struct seq_net_private)); 1248 1283 if (!p) 1249 1284 goto error_1; 1250 1285 1251 1286 /* a file of volumes that we have mounted */ 1252 - p = proc_create("volumes", S_IFREG|S_IRUGO, 1253 - nn->proc_nfsfs, &nfs_volume_list_fops); 1287 + p = proc_create_net("volumes", S_IFREG|S_IRUGO, nn->proc_nfsfs, 1288 + &nfs_volume_list_ops, sizeof(struct seq_net_private)); 1254 1289 if (!p) 1255 1290 goto error_1; 1256 1291 return 0;
+40 -21
fs/proc/proc_net.c
··· 38 38 return maybe_get_net(PDE_NET(PDE(inode))); 39 39 } 40 40 41 - int seq_open_net(struct inode *ino, struct file *f, 42 - const struct seq_operations *ops, int size) 41 + static int seq_open_net(struct inode *inode, struct file *file) 43 42 { 44 - struct net *net; 43 + unsigned int state_size = PDE(inode)->state_size; 45 44 struct seq_net_private *p; 45 + struct net *net; 46 46 47 - BUG_ON(size < sizeof(*p)); 47 + WARN_ON_ONCE(state_size < sizeof(*p)); 48 48 49 - net = get_proc_net(ino); 50 - if (net == NULL) 49 + net = get_proc_net(inode); 50 + if (!net) 51 51 return -ENXIO; 52 52 53 - p = __seq_open_private(f, ops, size); 54 - if (p == NULL) { 53 + p = __seq_open_private(file, PDE(inode)->seq_ops, state_size); 54 + if (!p) { 55 55 put_net(net); 56 56 return -ENOMEM; 57 57 } ··· 60 60 #endif 61 61 return 0; 62 62 } 63 - EXPORT_SYMBOL_GPL(seq_open_net); 63 + 64 + static int seq_release_net(struct inode *ino, struct file *f) 65 + { 66 + struct seq_file *seq = f->private_data; 67 + 68 + put_net(seq_file_net(seq)); 69 + seq_release_private(ino, f); 70 + return 0; 71 + } 72 + 73 + static const struct file_operations proc_net_seq_fops = { 74 + .open = seq_open_net, 75 + .read = seq_read, 76 + .llseek = seq_lseek, 77 + .release = seq_release_net, 78 + }; 79 + 80 + struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode, 81 + struct proc_dir_entry *parent, const struct seq_operations *ops, 82 + unsigned int state_size, void *data) 83 + { 84 + struct proc_dir_entry *p; 85 + 86 + p = proc_create_reg(name, mode, &parent, data); 87 + if (!p) 88 + return NULL; 89 + p->proc_fops = &proc_net_seq_fops; 90 + p->seq_ops = ops; 91 + p->state_size = state_size; 92 + return proc_register(parent, p); 93 + } 94 + EXPORT_SYMBOL_GPL(proc_create_net_data); 64 95 65 96 int single_open_net(struct inode *inode, struct file *file, 66 97 int (*show)(struct seq_file *, void *)) ··· 116 85 return err; 117 86 } 118 87 EXPORT_SYMBOL_GPL(single_open_net); 119 - 120 - int seq_release_net(struct inode *ino, struct file *f) 121 - { 122 - struct seq_file *seq; 123 - 124 - seq = f->private_data; 125 - 126 - put_net(seq_file_net(seq)); 127 - seq_release_private(ino, f); 128 - return 0; 129 - } 130 - EXPORT_SYMBOL_GPL(seq_release_net); 131 88 132 89 int single_release_net(struct inode *ino, struct file *f) 133 90 {
+9
include/linux/proc_fs.h
··· 53 53 extern void remove_proc_entry(const char *, struct proc_dir_entry *); 54 54 extern int remove_proc_subtree(const char *, struct proc_dir_entry *); 55 55 56 + struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode, 57 + struct proc_dir_entry *parent, const struct seq_operations *ops, 58 + unsigned int state_size, void *data); 59 + #define proc_create_net(name, mode, parent, state_size, ops) \ 60 + proc_create_net_data(name, mode, parent, state_size, ops, NULL) 61 + 56 62 #else /* CONFIG_PROC_FS */ 57 63 58 64 static inline void proc_root_init(void) ··· 94 88 static inline void proc_remove(struct proc_dir_entry *de) {} 95 89 #define remove_proc_entry(name, parent) do {} while (0) 96 90 static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *parent) { return 0; } 91 + 92 + #define proc_create_net_data(name, mode, parent, ops, state_size, data) ({NULL;}) 93 + #define proc_create_net(name, mode, parent, state_size, ops) ({NULL;}) 97 94 98 95 #endif /* CONFIG_PROC_FS */ 99 96
-3
include/linux/seq_file_net.h
··· 13 13 #endif 14 14 }; 15 15 16 - int seq_open_net(struct inode *, struct file *, 17 - const struct seq_operations *, int); 18 16 int single_open_net(struct inode *, struct file *file, 19 17 int (*show)(struct seq_file *, void *)); 20 - int seq_release_net(struct inode *, struct file *); 21 18 int single_release_net(struct inode *, struct file *); 22 19 static inline struct net *seq_file_net(struct seq_file *seq) 23 20 {
+9 -1
include/net/ip6_fib.h
··· 394 394 395 395 int fib6_init(void); 396 396 397 - int ipv6_route_open(struct inode *inode, struct file *file); 397 + struct ipv6_route_iter { 398 + struct seq_net_private p; 399 + struct fib6_walker w; 400 + loff_t skip; 401 + struct fib6_table *tbl; 402 + int sernum; 403 + }; 404 + 405 + extern const struct seq_operations ipv6_route_seq_ops; 398 406 399 407 int call_fib6_notifier(struct notifier_block *nb, struct net *net, 400 408 enum fib_event_type event_type,
+2 -2
include/net/phonet/pn_dev.h
··· 56 56 57 57 #define PN_NO_ADDR 0xff 58 58 59 - extern const struct file_operations pn_sock_seq_fops; 60 - extern const struct file_operations pn_res_seq_fops; 59 + extern const struct seq_operations pn_sock_seq_ops; 60 + extern const struct seq_operations pn_res_seq_ops; 61 61 62 62 #endif
+2 -2
include/net/udp.h
··· 423 423 void *udp_seq_next(struct seq_file *seq, void *v, loff_t *pos); 424 424 void udp_seq_stop(struct seq_file *seq, void *v); 425 425 426 - extern const struct file_operations udp_afinfo_seq_fops; 427 - extern const struct file_operations udp6_afinfo_seq_fops; 426 + extern const struct seq_operations udp_seq_ops; 427 + extern const struct seq_operations udp6_seq_ops; 428 428 429 429 int udp4_proc_init(void); 430 430 void udp4_proc_exit(void);
+3 -15
net/8021q/vlanproc.c
··· 73 73 .show = vlan_seq_show, 74 74 }; 75 75 76 - static int vlan_seq_open(struct inode *inode, struct file *file) 77 - { 78 - return seq_open_net(inode, file, &vlan_seq_ops, 79 - sizeof(struct seq_net_private)); 80 - } 81 - 82 - static const struct file_operations vlan_fops = { 83 - .open = vlan_seq_open, 84 - .read = seq_read, 85 - .llseek = seq_lseek, 86 - .release = seq_release_net, 87 - }; 88 - 89 76 /* 90 77 * Proc filesystem directory entries. 91 78 */ ··· 119 132 if (!vn->proc_vlan_dir) 120 133 goto err; 121 134 122 - vn->proc_vlan_conf = proc_create(name_conf, S_IFREG | 0600, 123 - vn->proc_vlan_dir, &vlan_fops); 135 + vn->proc_vlan_conf = proc_create_net(name_conf, S_IFREG | 0600, 136 + vn->proc_vlan_dir, &vlan_seq_ops, 137 + sizeof(struct seq_net_private)); 124 138 if (!vn->proc_vlan_conf) 125 139 goto err; 126 140 return 0;
+2 -15
net/atm/clip.c
··· 863 863 .stop = neigh_seq_stop, 864 864 .show = clip_seq_show, 865 865 }; 866 - 867 - static int arp_seq_open(struct inode *inode, struct file *file) 868 - { 869 - return seq_open_net(inode, file, &arp_seq_ops, 870 - sizeof(struct clip_seq_state)); 871 - } 872 - 873 - static const struct file_operations arp_seq_fops = { 874 - .open = arp_seq_open, 875 - .read = seq_read, 876 - .llseek = seq_lseek, 877 - .release = seq_release_net, 878 - .owner = THIS_MODULE 879 - }; 880 866 #endif 881 867 882 868 static void atm_clip_exit_noproc(void); ··· 879 893 { 880 894 struct proc_dir_entry *p; 881 895 882 - p = proc_create("arp", 0444, atm_proc_root, &arp_seq_fops); 896 + p = proc_create_net("arp", 0444, atm_proc_root, &arp_seq_ops, 897 + sizeof(struct clip_seq_state)); 883 898 if (!p) { 884 899 pr_err("Unable to initialize /proc/net/atm/arp\n"); 885 900 atm_clip_exit_noproc();
+6 -43
net/core/net-procfs.c
··· 175 175 .show = dev_seq_show, 176 176 }; 177 177 178 - static int dev_seq_open(struct inode *inode, struct file *file) 179 - { 180 - return seq_open_net(inode, file, &dev_seq_ops, 181 - sizeof(struct seq_net_private)); 182 - } 183 - 184 - static const struct file_operations dev_seq_fops = { 185 - .open = dev_seq_open, 186 - .read = seq_read, 187 - .llseek = seq_lseek, 188 - .release = seq_release_net, 189 - }; 190 - 191 178 static const struct seq_operations softnet_seq_ops = { 192 179 .start = softnet_seq_start, 193 180 .next = softnet_seq_next, ··· 272 285 .show = ptype_seq_show, 273 286 }; 274 287 275 - static int ptype_seq_open(struct inode *inode, struct file *file) 276 - { 277 - return seq_open_net(inode, file, &ptype_seq_ops, 278 - sizeof(struct seq_net_private)); 279 - } 280 - 281 - static const struct file_operations ptype_seq_fops = { 282 - .open = ptype_seq_open, 283 - .read = seq_read, 284 - .llseek = seq_lseek, 285 - .release = seq_release_net, 286 - }; 287 - 288 - 289 288 static int __net_init dev_proc_net_init(struct net *net) 290 289 { 291 290 int rc = -ENOMEM; 292 291 293 - if (!proc_create("dev", 0444, net->proc_net, &dev_seq_fops)) 292 + if (!proc_create_net("dev", 0444, net->proc_net, &dev_seq_ops, 293 + sizeof(struct seq_net_private))) 294 294 goto out; 295 295 if (!proc_create_seq("softnet_stat", 0444, net->proc_net, 296 296 &softnet_seq_ops)) 297 297 goto out_dev; 298 - if (!proc_create("ptype", 0444, net->proc_net, &ptype_seq_fops)) 298 + if (!proc_create_net("ptype", 0444, net->proc_net, &ptype_seq_ops, 299 + sizeof(struct seq_net_private))) 299 300 goto out_softnet; 300 301 301 302 if (wext_proc_init(net)) ··· 340 365 .show = dev_mc_seq_show, 341 366 }; 342 367 343 - static int dev_mc_seq_open(struct inode *inode, struct file *file) 344 - { 345 - return seq_open_net(inode, file, &dev_mc_seq_ops, 346 - sizeof(struct seq_net_private)); 347 - } 348 - 349 - static const struct file_operations dev_mc_seq_fops = { 350 - .open = dev_mc_seq_open, 351 - .read = seq_read, 352 - .llseek = seq_lseek, 353 - .release = seq_release_net, 354 - }; 355 - 356 368 static int __net_init dev_mc_net_init(struct net *net) 357 369 { 358 - if (!proc_create("dev_mcast", 0, net->proc_net, &dev_mc_seq_fops)) 370 + if (!proc_create_net("dev_mcast", 0, net->proc_net, &dev_mc_seq_ops, 371 + sizeof(struct seq_net_private))) 359 372 return -ENOMEM; 360 373 return 0; 361 374 }
+2 -14
net/core/sock.c
··· 3439 3439 .show = proto_seq_show, 3440 3440 }; 3441 3441 3442 - static int proto_seq_open(struct inode *inode, struct file *file) 3443 - { 3444 - return seq_open_net(inode, file, &proto_seq_ops, 3445 - sizeof(struct seq_net_private)); 3446 - } 3447 - 3448 - static const struct file_operations proto_seq_fops = { 3449 - .open = proto_seq_open, 3450 - .read = seq_read, 3451 - .llseek = seq_lseek, 3452 - .release = seq_release_net, 3453 - }; 3454 - 3455 3442 static __net_init int proto_init_net(struct net *net) 3456 3443 { 3457 - if (!proc_create("protocols", 0444, net->proc_net, &proto_seq_fops)) 3444 + if (!proc_create_net("protocols", 0444, net->proc_net, &proto_seq_ops, 3445 + sizeof(struct seq_net_private))) 3458 3446 return -ENOMEM; 3459 3447 3460 3448 return 0;
+2 -16
net/decnet/dn_neigh.c
··· 589 589 .stop = neigh_seq_stop, 590 590 .show = dn_neigh_seq_show, 591 591 }; 592 - 593 - static int dn_neigh_seq_open(struct inode *inode, struct file *file) 594 - { 595 - return seq_open_net(inode, file, &dn_neigh_seq_ops, 596 - sizeof(struct neigh_seq_state)); 597 - } 598 - 599 - static const struct file_operations dn_neigh_seq_fops = { 600 - .open = dn_neigh_seq_open, 601 - .read = seq_read, 602 - .llseek = seq_lseek, 603 - .release = seq_release_net, 604 - }; 605 - 606 592 #endif 607 593 608 594 void __init dn_neigh_init(void) 609 595 { 610 596 neigh_table_init(NEIGH_DN_TABLE, &dn_neigh_table); 611 - proc_create("decnet_neigh", 0444, init_net.proc_net, 612 - &dn_neigh_seq_fops); 597 + proc_create_net("decnet_neigh", 0444, init_net.proc_net, 598 + &dn_neigh_seq_ops, sizeof(struct neigh_seq_state)); 613 599 } 614 600 615 601 void __exit dn_neigh_cleanup(void)
+3 -14
net/ipv4/arp.c
··· 1418 1418 .show = arp_seq_show, 1419 1419 }; 1420 1420 1421 - static int arp_seq_open(struct inode *inode, struct file *file) 1422 - { 1423 - return seq_open_net(inode, file, &arp_seq_ops, 1424 - sizeof(struct neigh_seq_state)); 1425 - } 1426 - 1427 - static const struct file_operations arp_seq_fops = { 1428 - .open = arp_seq_open, 1429 - .read = seq_read, 1430 - .llseek = seq_lseek, 1431 - .release = seq_release_net, 1432 - }; 1433 - 1421 + /* ------------------------------------------------------------------------ */ 1434 1422 1435 1423 static int __net_init arp_net_init(struct net *net) 1436 1424 { 1437 - if (!proc_create("arp", 0444, net->proc_net, &arp_seq_fops)) 1425 + if (!proc_create_net("arp", 0444, net->proc_net, &arp_seq_ops, 1426 + sizeof(struct neigh_seq_state))) 1438 1427 return -ENOMEM; 1439 1428 return 0; 1440 1429 }
+4 -28
net/ipv4/fib_trie.c
··· 2533 2533 .show = fib_trie_seq_show, 2534 2534 }; 2535 2535 2536 - static int fib_trie_seq_open(struct inode *inode, struct file *file) 2537 - { 2538 - return seq_open_net(inode, file, &fib_trie_seq_ops, 2539 - sizeof(struct fib_trie_iter)); 2540 - } 2541 - 2542 - static const struct file_operations fib_trie_fops = { 2543 - .open = fib_trie_seq_open, 2544 - .read = seq_read, 2545 - .llseek = seq_lseek, 2546 - .release = seq_release_net, 2547 - }; 2548 - 2549 2536 struct fib_route_iter { 2550 2537 struct seq_net_private p; 2551 2538 struct fib_table *main_tb; ··· 2713 2726 .show = fib_route_seq_show, 2714 2727 }; 2715 2728 2716 - static int fib_route_seq_open(struct inode *inode, struct file *file) 2717 - { 2718 - return seq_open_net(inode, file, &fib_route_seq_ops, 2719 - sizeof(struct fib_route_iter)); 2720 - } 2721 - 2722 - static const struct file_operations fib_route_fops = { 2723 - .open = fib_route_seq_open, 2724 - .read = seq_read, 2725 - .llseek = seq_lseek, 2726 - .release = seq_release_net, 2727 - }; 2728 - 2729 2729 int __net_init fib_proc_init(struct net *net) 2730 2730 { 2731 - if (!proc_create("fib_trie", 0444, net->proc_net, &fib_trie_fops)) 2731 + if (!proc_create_net("fib_trie", 0444, net->proc_net, &fib_trie_seq_ops, 2732 + sizeof(struct fib_trie_iter))) 2732 2733 goto out1; 2733 2734 2734 2735 if (!proc_create("fib_triestat", 0444, net->proc_net, 2735 2736 &fib_triestat_fops)) 2736 2737 goto out2; 2737 2738 2738 - if (!proc_create("route", 0444, net->proc_net, &fib_route_fops)) 2739 + if (!proc_create_net("route", 0444, net->proc_net, &fib_route_seq_ops, 2740 + sizeof(struct fib_route_iter))) 2739 2741 goto out3; 2740 2742 2741 2743 return 0;
+4 -29
net/ipv4/igmp.c
··· 2829 2829 .show = igmp_mc_seq_show, 2830 2830 }; 2831 2831 2832 - static int igmp_mc_seq_open(struct inode *inode, struct file *file) 2833 - { 2834 - return seq_open_net(inode, file, &igmp_mc_seq_ops, 2835 - sizeof(struct igmp_mc_iter_state)); 2836 - } 2837 - 2838 - static const struct file_operations igmp_mc_seq_fops = { 2839 - .open = igmp_mc_seq_open, 2840 - .read = seq_read, 2841 - .llseek = seq_lseek, 2842 - .release = seq_release_net, 2843 - }; 2844 - 2845 2832 struct igmp_mcf_iter_state { 2846 2833 struct seq_net_private p; 2847 2834 struct net_device *dev; ··· 2962 2975 .show = igmp_mcf_seq_show, 2963 2976 }; 2964 2977 2965 - static int igmp_mcf_seq_open(struct inode *inode, struct file *file) 2966 - { 2967 - return seq_open_net(inode, file, &igmp_mcf_seq_ops, 2968 - sizeof(struct igmp_mcf_iter_state)); 2969 - } 2970 - 2971 - static const struct file_operations igmp_mcf_seq_fops = { 2972 - .open = igmp_mcf_seq_open, 2973 - .read = seq_read, 2974 - .llseek = seq_lseek, 2975 - .release = seq_release_net, 2976 - }; 2977 - 2978 2978 static int __net_init igmp_net_init(struct net *net) 2979 2979 { 2980 2980 struct proc_dir_entry *pde; 2981 2981 int err; 2982 2982 2983 - pde = proc_create("igmp", 0444, net->proc_net, &igmp_mc_seq_fops); 2983 + pde = proc_create_net("igmp", 0444, net->proc_net, &igmp_mc_seq_ops, 2984 + sizeof(struct igmp_mc_iter_state)); 2984 2985 if (!pde) 2985 2986 goto out_igmp; 2986 - pde = proc_create("mcfilter", 0444, net->proc_net, 2987 - &igmp_mcf_seq_fops); 2987 + pde = proc_create_net("mcfilter", 0444, net->proc_net, 2988 + &igmp_mcf_seq_ops, sizeof(struct igmp_mcf_iter_state)); 2988 2989 if (!pde) 2989 2990 goto out_mcfilter; 2990 2991 err = inet_ctl_sock_create(&net->ipv4.mc_autojoin_sk, AF_INET,
+4 -28
net/ipv4/ipmr.c
··· 2828 2828 .show = ipmr_vif_seq_show, 2829 2829 }; 2830 2830 2831 - static int ipmr_vif_open(struct inode *inode, struct file *file) 2832 - { 2833 - return seq_open_net(inode, file, &ipmr_vif_seq_ops, 2834 - sizeof(struct mr_vif_iter)); 2835 - } 2836 - 2837 - static const struct file_operations ipmr_vif_fops = { 2838 - .open = ipmr_vif_open, 2839 - .read = seq_read, 2840 - .llseek = seq_lseek, 2841 - .release = seq_release_net, 2842 - }; 2843 - 2844 2831 static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos) 2845 2832 { 2846 2833 struct net *net = seq_file_net(seq); ··· 2886 2899 .next = mr_mfc_seq_next, 2887 2900 .stop = mr_mfc_seq_stop, 2888 2901 .show = ipmr_mfc_seq_show, 2889 - }; 2890 - 2891 - static int ipmr_mfc_open(struct inode *inode, struct file *file) 2892 - { 2893 - return seq_open_net(inode, file, &ipmr_mfc_seq_ops, 2894 - sizeof(struct mr_mfc_iter)); 2895 - } 2896 - 2897 - static const struct file_operations ipmr_mfc_fops = { 2898 - .open = ipmr_mfc_open, 2899 - .read = seq_read, 2900 - .llseek = seq_lseek, 2901 - .release = seq_release_net, 2902 2902 }; 2903 2903 #endif 2904 2904 ··· 2951 2977 2952 2978 #ifdef CONFIG_PROC_FS 2953 2979 err = -ENOMEM; 2954 - if (!proc_create("ip_mr_vif", 0, net->proc_net, &ipmr_vif_fops)) 2980 + if (!proc_create_net("ip_mr_vif", 0, net->proc_net, &ipmr_vif_seq_ops, 2981 + sizeof(struct mr_vif_iter))) 2955 2982 goto proc_vif_fail; 2956 - if (!proc_create("ip_mr_cache", 0, net->proc_net, &ipmr_mfc_fops)) 2983 + if (!proc_create_net("ip_mr_cache", 0, net->proc_net, &ipmr_mfc_seq_ops, 2984 + sizeof(struct mr_mfc_iter))) 2957 2985 goto proc_cache_fail; 2958 2986 #endif 2959 2987 return 0;
+2 -14
net/ipv4/ping.c
··· 1157 1157 .stop = ping_seq_stop, 1158 1158 }; 1159 1159 1160 - static int ping_v4_seq_open(struct inode *inode, struct file *file) 1161 - { 1162 - return seq_open_net(inode, file, &ping_v4_seq_ops, 1163 - sizeof(struct ping_iter_state)); 1164 - } 1165 - 1166 - const struct file_operations ping_v4_seq_fops = { 1167 - .open = ping_v4_seq_open, 1168 - .read = seq_read, 1169 - .llseek = seq_lseek, 1170 - .release = seq_release_net, 1171 - }; 1172 - 1173 1160 static int __net_init ping_v4_proc_init_net(struct net *net) 1174 1161 { 1175 - if (!proc_create("icmp", 0444, net->proc_net, &ping_v4_seq_fops)) 1162 + if (!proc_create_net("icmp", 0444, net->proc_net, &ping_v4_seq_ops, 1163 + sizeof(struct ping_iter_state))) 1176 1164 return -ENOMEM; 1177 1165 return 0; 1178 1166 }
+2 -15
net/ipv4/raw.c
··· 1112 1112 .show = raw_seq_show, 1113 1113 }; 1114 1114 1115 - static int raw_v4_seq_open(struct inode *inode, struct file *file) 1116 - { 1117 - return seq_open_net(inode, file, &raw_seq_ops, 1118 - sizeof(struct raw_iter_state)); 1119 - } 1120 - 1121 - static const struct file_operations raw_seq_fops = { 1122 - .open = raw_v4_seq_open, 1123 - .read = seq_read, 1124 - .llseek = seq_lseek, 1125 - .release = seq_release_net, 1126 - }; 1127 - 1128 1115 static __net_init int raw_init_net(struct net *net) 1129 1116 { 1130 - if (!proc_create_data("raw", 0444, net->proc_net, &raw_seq_fops, 1131 - &raw_v4_hashinfo)) 1117 + if (!proc_create_net_data("raw", 0444, net->proc_net, &raw_seq_ops, 1118 + sizeof(struct raw_iter_state), &raw_v4_hashinfo)) 1132 1119 return -ENOMEM; 1133 1120 1134 1121 return 0;
+2 -15
net/ipv4/tcp_ipv4.c
··· 2350 2350 .stop = tcp_seq_stop, 2351 2351 }; 2352 2352 2353 - static int tcp_seq_open(struct inode *inode, struct file *file) 2354 - { 2355 - return seq_open_net(inode, file, &tcp4_seq_ops, 2356 - sizeof(struct tcp_iter_state)); 2357 - } 2358 - 2359 - static const struct file_operations tcp_afinfo_seq_fops = { 2360 - .open = tcp_seq_open, 2361 - .read = seq_read, 2362 - .llseek = seq_lseek, 2363 - .release = seq_release_net 2364 - }; 2365 - 2366 2353 static struct tcp_seq_afinfo tcp4_seq_afinfo = { 2367 2354 .family = AF_INET, 2368 2355 }; 2369 2356 2370 2357 static int __net_init tcp4_proc_init_net(struct net *net) 2371 2358 { 2372 - if (!proc_create_data("tcp", 0444, net->proc_net, 2373 - &tcp_afinfo_seq_fops, &tcp4_seq_afinfo)) 2359 + if (!proc_create_net_data("tcp", 0444, net->proc_net, &tcp4_seq_ops, 2360 + sizeof(struct tcp_iter_state), &tcp4_seq_afinfo)) 2374 2361 return -ENOMEM; 2375 2362 return 0; 2376 2363 }
+4 -17
net/ipv4/udp.c
··· 2706 2706 return 0; 2707 2707 } 2708 2708 2709 - static const struct seq_operations udp_seq_ops = { 2709 + const struct seq_operations udp_seq_ops = { 2710 2710 .start = udp_seq_start, 2711 2711 .next = udp_seq_next, 2712 2712 .stop = udp_seq_stop, 2713 2713 .show = udp4_seq_show, 2714 2714 }; 2715 - 2716 - static int udp_seq_open(struct inode *inode, struct file *file) 2717 - { 2718 - return seq_open_net(inode, file, &udp_seq_ops, 2719 - sizeof(struct udp_iter_state)); 2720 - } 2721 - 2722 - const struct file_operations udp_afinfo_seq_fops = { 2723 - .open = udp_seq_open, 2724 - .read = seq_read, 2725 - .llseek = seq_lseek, 2726 - .release = seq_release_net 2727 - }; 2728 - EXPORT_SYMBOL(udp_afinfo_seq_fops); 2715 + EXPORT_SYMBOL(udp_seq_ops); 2729 2716 2730 2717 static struct udp_seq_afinfo udp4_seq_afinfo = { 2731 2718 .family = AF_INET, ··· 2721 2734 2722 2735 static int __net_init udp4_proc_init_net(struct net *net) 2723 2736 { 2724 - if (!proc_create_data("udp", 0444, net->proc_net, &udp_afinfo_seq_fops, 2725 - &udp4_seq_afinfo)) 2737 + if (!proc_create_net_data("udp", 0444, net->proc_net, &udp_seq_ops, 2738 + sizeof(struct udp_iter_state), &udp4_seq_afinfo)) 2726 2739 return -ENOMEM; 2727 2740 return 0; 2728 2741 }
+2 -2
net/ipv4/udplite.c
··· 81 81 82 82 static int __net_init udplite4_proc_init_net(struct net *net) 83 83 { 84 - if (!proc_create_data("udplite", 0444, net->proc_net, 85 - &udp_afinfo_seq_fops, &udplite4_seq_afinfo)) 84 + if (!proc_create_net_data("udplite", 0444, net->proc_net, &udp_seq_ops, 85 + sizeof(struct udp_iter_state), &udplite4_seq_afinfo)) 86 86 return -ENOMEM; 87 87 return 0; 88 88 }
+2 -14
net/ipv6/addrconf.c
··· 4254 4254 .stop = if6_seq_stop, 4255 4255 }; 4256 4256 4257 - static int if6_seq_open(struct inode *inode, struct file *file) 4258 - { 4259 - return seq_open_net(inode, file, &if6_seq_ops, 4260 - sizeof(struct if6_iter_state)); 4261 - } 4262 - 4263 - static const struct file_operations if6_fops = { 4264 - .open = if6_seq_open, 4265 - .read = seq_read, 4266 - .llseek = seq_lseek, 4267 - .release = seq_release_net, 4268 - }; 4269 - 4270 4257 static int __net_init if6_proc_net_init(struct net *net) 4271 4258 { 4272 - if (!proc_create("if_inet6", 0444, net->proc_net, &if6_fops)) 4259 + if (!proc_create_net("if_inet6", 0444, net->proc_net, &if6_seq_ops, 4260 + sizeof(struct if6_iter_state))) 4273 4261 return -ENOMEM; 4274 4262 return 0; 4275 4263 }
+2 -14
net/ipv6/anycast.c
··· 529 529 .show = ac6_seq_show, 530 530 }; 531 531 532 - static int ac6_seq_open(struct inode *inode, struct file *file) 533 - { 534 - return seq_open_net(inode, file, &ac6_seq_ops, 535 - sizeof(struct ac6_iter_state)); 536 - } 537 - 538 - static const struct file_operations ac6_seq_fops = { 539 - .open = ac6_seq_open, 540 - .read = seq_read, 541 - .llseek = seq_lseek, 542 - .release = seq_release_net, 543 - }; 544 - 545 532 int __net_init ac6_proc_init(struct net *net) 546 533 { 547 - if (!proc_create("anycast6", 0444, net->proc_net, &ac6_seq_fops)) 534 + if (!proc_create_net("anycast6", 0444, net->proc_net, &ac6_seq_ops, 535 + sizeof(struct ac6_iter_state))) 548 536 return -ENOMEM; 549 537 550 538 return 0;
+1 -17
net/ipv6/ip6_fib.c
··· 2209 2209 } 2210 2210 2211 2211 #ifdef CONFIG_PROC_FS 2212 - 2213 - struct ipv6_route_iter { 2214 - struct seq_net_private p; 2215 - struct fib6_walker w; 2216 - loff_t skip; 2217 - struct fib6_table *tbl; 2218 - int sernum; 2219 - }; 2220 - 2221 2212 static int ipv6_route_seq_show(struct seq_file *seq, void *v) 2222 2213 { 2223 2214 struct rt6_info *rt = v; ··· 2374 2383 rcu_read_unlock_bh(); 2375 2384 } 2376 2385 2377 - static const struct seq_operations ipv6_route_seq_ops = { 2386 + const struct seq_operations ipv6_route_seq_ops = { 2378 2387 .start = ipv6_route_seq_start, 2379 2388 .next = ipv6_route_seq_next, 2380 2389 .stop = ipv6_route_seq_stop, 2381 2390 .show = ipv6_route_seq_show 2382 2391 }; 2383 - 2384 - int ipv6_route_open(struct inode *inode, struct file *file) 2385 - { 2386 - return seq_open_net(inode, file, &ipv6_route_seq_ops, 2387 - sizeof(struct ipv6_route_iter)); 2388 - } 2389 - 2390 2392 #endif /* CONFIG_PROC_FS */
+2 -15
net/ipv6/ip6_flowlabel.c
··· 812 812 .show = ip6fl_seq_show, 813 813 }; 814 814 815 - static int ip6fl_seq_open(struct inode *inode, struct file *file) 816 - { 817 - return seq_open_net(inode, file, &ip6fl_seq_ops, 818 - sizeof(struct ip6fl_iter_state)); 819 - } 820 - 821 - static const struct file_operations ip6fl_seq_fops = { 822 - .open = ip6fl_seq_open, 823 - .read = seq_read, 824 - .llseek = seq_lseek, 825 - .release = seq_release_net, 826 - }; 827 - 828 815 static int __net_init ip6_flowlabel_proc_init(struct net *net) 829 816 { 830 - if (!proc_create("ip6_flowlabel", 0444, net->proc_net, 831 - &ip6fl_seq_fops)) 817 + if (!proc_create_net("ip6_flowlabel", 0444, net->proc_net, 818 + &ip6fl_seq_ops, sizeof(struct ip6fl_iter_state))) 832 819 return -ENOMEM; 833 820 return 0; 834 821 }
+4 -28
net/ipv6/ip6mr.c
··· 439 439 .show = ip6mr_vif_seq_show, 440 440 }; 441 441 442 - static int ip6mr_vif_open(struct inode *inode, struct file *file) 443 - { 444 - return seq_open_net(inode, file, &ip6mr_vif_seq_ops, 445 - sizeof(struct mr_vif_iter)); 446 - } 447 - 448 - static const struct file_operations ip6mr_vif_fops = { 449 - .open = ip6mr_vif_open, 450 - .read = seq_read, 451 - .llseek = seq_lseek, 452 - .release = seq_release_net, 453 - }; 454 - 455 442 static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos) 456 443 { 457 444 struct net *net = seq_file_net(seq); ··· 498 511 .next = mr_mfc_seq_next, 499 512 .stop = mr_mfc_seq_stop, 500 513 .show = ipmr_mfc_seq_show, 501 - }; 502 - 503 - static int ipmr_mfc_open(struct inode *inode, struct file *file) 504 - { 505 - return seq_open_net(inode, file, &ipmr_mfc_seq_ops, 506 - sizeof(struct mr_mfc_iter)); 507 - } 508 - 509 - static const struct file_operations ip6mr_mfc_fops = { 510 - .open = ipmr_mfc_open, 511 - .read = seq_read, 512 - .llseek = seq_lseek, 513 - .release = seq_release_net, 514 514 }; 515 515 #endif 516 516 ··· 1290 1316 1291 1317 #ifdef CONFIG_PROC_FS 1292 1318 err = -ENOMEM; 1293 - if (!proc_create("ip6_mr_vif", 0, net->proc_net, &ip6mr_vif_fops)) 1319 + if (!proc_create_net("ip6_mr_vif", 0, net->proc_net, &ip6mr_vif_seq_ops, 1320 + sizeof(struct mr_vif_iter))) 1294 1321 goto proc_vif_fail; 1295 - if (!proc_create("ip6_mr_cache", 0, net->proc_net, &ip6mr_mfc_fops)) 1322 + if (!proc_create_net("ip6_mr_cache", 0, net->proc_net, &ipmr_mfc_seq_ops, 1323 + sizeof(struct mr_mfc_iter))) 1296 1324 goto proc_cache_fail; 1297 1325 #endif 1298 1326
+5 -29
net/ipv6/mcast.c
··· 2749 2749 .show = igmp6_mc_seq_show, 2750 2750 }; 2751 2751 2752 - static int igmp6_mc_seq_open(struct inode *inode, struct file *file) 2753 - { 2754 - return seq_open_net(inode, file, &igmp6_mc_seq_ops, 2755 - sizeof(struct igmp6_mc_iter_state)); 2756 - } 2757 - 2758 - static const struct file_operations igmp6_mc_seq_fops = { 2759 - .open = igmp6_mc_seq_open, 2760 - .read = seq_read, 2761 - .llseek = seq_lseek, 2762 - .release = seq_release_net, 2763 - }; 2764 - 2765 2752 struct igmp6_mcf_iter_state { 2766 2753 struct seq_net_private p; 2767 2754 struct net_device *dev; ··· 2890 2903 .show = igmp6_mcf_seq_show, 2891 2904 }; 2892 2905 2893 - static int igmp6_mcf_seq_open(struct inode *inode, struct file *file) 2894 - { 2895 - return seq_open_net(inode, file, &igmp6_mcf_seq_ops, 2896 - sizeof(struct igmp6_mcf_iter_state)); 2897 - } 2898 - 2899 - static const struct file_operations igmp6_mcf_seq_fops = { 2900 - .open = igmp6_mcf_seq_open, 2901 - .read = seq_read, 2902 - .llseek = seq_lseek, 2903 - .release = seq_release_net, 2904 - }; 2905 - 2906 2906 static int __net_init igmp6_proc_init(struct net *net) 2907 2907 { 2908 2908 int err; 2909 2909 2910 2910 err = -ENOMEM; 2911 - if (!proc_create("igmp6", 0444, net->proc_net, &igmp6_mc_seq_fops)) 2911 + if (!proc_create_net("igmp6", 0444, net->proc_net, &igmp6_mc_seq_ops, 2912 + sizeof(struct igmp6_mc_iter_state))) 2912 2913 goto out; 2913 - if (!proc_create("mcfilter6", 0444, net->proc_net, 2914 - &igmp6_mcf_seq_fops)) 2914 + if (!proc_create_net("mcfilter6", 0444, net->proc_net, 2915 + &igmp6_mcf_seq_ops, 2916 + sizeof(struct igmp6_mcf_iter_state))) 2915 2917 goto out_proc_net_igmp6; 2916 2918 2917 2919 err = 0;
+2 -14
net/ipv6/ping.c
··· 223 223 .stop = ping_seq_stop, 224 224 }; 225 225 226 - static int ping_v6_seq_open(struct inode *inode, struct file *file) 227 - { 228 - return seq_open_net(inode, file, &ping_v6_seq_ops, 229 - sizeof(struct ping_iter_state)); 230 - } 231 - 232 - const struct file_operations ping_v6_seq_fops = { 233 - .open = ping_v6_seq_open, 234 - .read = seq_read, 235 - .llseek = seq_lseek, 236 - .release = seq_release_net, 237 - }; 238 - 239 226 static int __net_init ping_v6_proc_init_net(struct net *net) 240 227 { 241 - if (!proc_create("icmp6", 0444, net->proc_net, &ping_v6_seq_fops)) 228 + if (!proc_create_net("icmp6", 0444, net->proc_net, &ping_v6_seq_ops, 229 + sizeof(struct ping_iter_state))) 242 230 return -ENOMEM; 243 231 return 0; 244 232 }
+2 -15
net/ipv6/raw.c
··· 1304 1304 .show = raw6_seq_show, 1305 1305 }; 1306 1306 1307 - static int raw6_seq_open(struct inode *inode, struct file *file) 1308 - { 1309 - return seq_open_net(inode, file, &raw6_seq_ops, 1310 - sizeof(struct raw_iter_state)); 1311 - } 1312 - 1313 - static const struct file_operations raw6_seq_fops = { 1314 - .open = raw6_seq_open, 1315 - .read = seq_read, 1316 - .llseek = seq_lseek, 1317 - .release = seq_release_net, 1318 - }; 1319 - 1320 1307 static int __net_init raw6_init_net(struct net *net) 1321 1308 { 1322 - if (!proc_create_data("raw6", 0444, net->proc_net, &raw6_seq_fops, 1323 - &raw_v6_hashinfo)) 1309 + if (!proc_create_net_data("raw6", 0444, net->proc_net, &raw6_seq_ops, 1310 + sizeof(struct raw_iter_state), &raw_v6_hashinfo)) 1324 1311 return -ENOMEM; 1325 1312 1326 1313 return 0;
+2 -9
net/ipv6/route.c
··· 4862 4862 */ 4863 4863 4864 4864 #ifdef CONFIG_PROC_FS 4865 - 4866 - static const struct file_operations ipv6_route_proc_fops = { 4867 - .open = ipv6_route_open, 4868 - .read = seq_read, 4869 - .llseek = seq_lseek, 4870 - .release = seq_release_net, 4871 - }; 4872 - 4873 4865 static int rt6_stats_seq_show(struct seq_file *seq, void *v) 4874 4866 { 4875 4867 struct net *net = (struct net *)seq->private; ··· 5092 5100 static int __net_init ip6_route_net_init_late(struct net *net) 5093 5101 { 5094 5102 #ifdef CONFIG_PROC_FS 5095 - proc_create("ipv6_route", 0, net->proc_net, &ipv6_route_proc_fops); 5103 + proc_create_net("ipv6_route", 0, net->proc_net, &ipv6_route_seq_ops, 5104 + sizeof(struct ipv6_route_iter)); 5096 5105 proc_create("rt6_stats", 0444, net->proc_net, &rt6_stats_seq_fops); 5097 5106 #endif 5098 5107 return 0;
+2 -15
net/ipv6/tcp_ipv6.c
··· 1916 1916 .stop = tcp_seq_stop, 1917 1917 }; 1918 1918 1919 - static int tcp6_seq_open(struct inode *inode, struct file *file) 1920 - { 1921 - return seq_open_net(inode, file, &tcp6_seq_ops, 1922 - sizeof(struct tcp_iter_state)); 1923 - } 1924 - 1925 - static const struct file_operations tcp6_afinfo_seq_fops = { 1926 - .open = tcp6_seq_open, 1927 - .read = seq_read, 1928 - .llseek = seq_lseek, 1929 - .release = seq_release_net 1930 - }; 1931 - 1932 1919 static struct tcp_seq_afinfo tcp6_seq_afinfo = { 1933 1920 .family = AF_INET6, 1934 1921 }; 1935 1922 1936 1923 int __net_init tcp6_proc_init(struct net *net) 1937 1924 { 1938 - if (!proc_create_data("tcp6", 0444, net->proc_net, 1939 - &tcp6_afinfo_seq_fops, &tcp6_seq_afinfo)) 1925 + if (!proc_create_net_data("tcp6", 0444, net->proc_net, &tcp6_seq_ops, 1926 + sizeof(struct tcp_iter_state), &tcp6_seq_afinfo)) 1940 1927 return -ENOMEM; 1941 1928 return 0; 1942 1929 }
+4 -17
net/ipv6/udp.c
··· 1480 1480 return 0; 1481 1481 } 1482 1482 1483 - static const struct seq_operations udp6_seq_ops = { 1483 + const struct seq_operations udp6_seq_ops = { 1484 1484 .start = udp_seq_start, 1485 1485 .next = udp_seq_next, 1486 1486 .stop = udp_seq_stop, 1487 1487 .show = udp6_seq_show, 1488 1488 }; 1489 - 1490 - static int udp6_seq_open(struct inode *inode, struct file *file) 1491 - { 1492 - return seq_open_net(inode, file, &udp6_seq_ops, 1493 - sizeof(struct udp_iter_state)); 1494 - } 1495 - 1496 - const struct file_operations udp6_afinfo_seq_fops = { 1497 - .open = udp6_seq_open, 1498 - .read = seq_read, 1499 - .llseek = seq_lseek, 1500 - .release = seq_release_net 1501 - }; 1502 - EXPORT_SYMBOL(udp6_afinfo_seq_fops); 1489 + EXPORT_SYMBOL(udp6_seq_ops); 1503 1490 1504 1491 static struct udp_seq_afinfo udp6_seq_afinfo = { 1505 1492 .family = AF_INET6, ··· 1495 1508 1496 1509 int __net_init udp6_proc_init(struct net *net) 1497 1510 { 1498 - if (!proc_create_data("udp6", 0444, net->proc_net, 1499 - &udp6_afinfo_seq_fops, &udp6_seq_afinfo)) 1511 + if (!proc_create_net_data("udp6", 0444, net->proc_net, &udp6_seq_ops, 1512 + sizeof(struct udp_iter_state), &udp6_seq_afinfo)) 1500 1513 return -ENOMEM; 1501 1514 return 0; 1502 1515 }
+3 -2
net/ipv6/udplite.c
··· 100 100 101 101 static int __net_init udplite6_proc_init_net(struct net *net) 102 102 { 103 - if (!proc_create_data("udplite6", 0444, net->proc_net, 104 - &udp6_afinfo_seq_fops, &udplite6_seq_afinfo)) 103 + if (!proc_create_net_data("udplite6", 0444, net->proc_net, 104 + &udp6_seq_ops, sizeof(struct udp_iter_state), 105 + &udplite6_seq_afinfo)) 105 106 return -ENOMEM; 106 107 return 0; 107 108 }
+2 -14
net/kcm/kcmproc.c
··· 239 239 .stop = kcm_seq_stop, 240 240 }; 241 241 242 - static int kcm_seq_open(struct inode *inode, struct file *file) 243 - { 244 - return seq_open_net(inode, file, &kcm_seq_ops, 245 - sizeof(struct kcm_proc_mux_state)); 246 - } 247 - 248 - static const struct file_operations kcm_seq_fops = { 249 - .open = kcm_seq_open, 250 - .read = seq_read, 251 - .llseek = seq_lseek, 252 - .release = seq_release_net, 253 - }; 254 - 255 242 static int kcm_stats_seq_show(struct seq_file *seq, void *v) 256 243 { 257 244 struct kcm_psock_stats psock_stats; ··· 363 376 &kcm_stats_seq_fops)) 364 377 goto out_kcm_stats; 365 378 366 - if (!proc_create("kcm", 0444, net->proc_net, &kcm_seq_fops)) 379 + if (!proc_create_net("kcm", 0444, net->proc_net, &kcm_seq_ops, 380 + sizeof(struct kcm_proc_mux_state))) 367 381 goto out_kcm; 368 382 369 383 return 0;
+2 -14
net/key/af_key.c
··· 3812 3812 .show = pfkey_seq_show, 3813 3813 }; 3814 3814 3815 - static int pfkey_seq_open(struct inode *inode, struct file *file) 3816 - { 3817 - return seq_open_net(inode, file, &pfkey_seq_ops, 3818 - sizeof(struct seq_net_private)); 3819 - } 3820 - 3821 - static const struct file_operations pfkey_proc_ops = { 3822 - .open = pfkey_seq_open, 3823 - .read = seq_read, 3824 - .llseek = seq_lseek, 3825 - .release = seq_release_net, 3826 - }; 3827 - 3828 3815 static int __net_init pfkey_init_proc(struct net *net) 3829 3816 { 3830 3817 struct proc_dir_entry *e; 3831 3818 3832 - e = proc_create("pfkey", 0, net->proc_net, &pfkey_proc_ops); 3819 + e = proc_create_net("pfkey", 0, net->proc_net, &pfkey_seq_ops, 3820 + sizeof(struct seq_net_private)); 3833 3821 if (e == NULL) 3834 3822 return -ENOMEM; 3835 3823
+2 -20
net/l2tp/l2tp_ppp.c
··· 1742 1742 .stop = pppol2tp_seq_stop, 1743 1743 .show = pppol2tp_seq_show, 1744 1744 }; 1745 - 1746 - /* Called when our /proc file is opened. We allocate data for use when 1747 - * iterating our tunnel / session contexts and store it in the private 1748 - * data of the seq_file. 1749 - */ 1750 - static int pppol2tp_proc_open(struct inode *inode, struct file *file) 1751 - { 1752 - return seq_open_net(inode, file, &pppol2tp_seq_ops, 1753 - sizeof(struct pppol2tp_seq_data)); 1754 - } 1755 - 1756 - static const struct file_operations pppol2tp_proc_fops = { 1757 - .open = pppol2tp_proc_open, 1758 - .read = seq_read, 1759 - .llseek = seq_lseek, 1760 - .release = seq_release_net, 1761 - }; 1762 - 1763 1745 #endif /* CONFIG_PROC_FS */ 1764 1746 1765 1747 /***************************************************************************** ··· 1753 1771 struct proc_dir_entry *pde; 1754 1772 int err = 0; 1755 1773 1756 - pde = proc_create("pppol2tp", 0444, net->proc_net, 1757 - &pppol2tp_proc_fops); 1774 + pde = proc_create_net("pppol2tp", 0444, net->proc_net, 1775 + &pppol2tp_seq_ops, sizeof(struct pppol2tp_seq_data)); 1758 1776 if (!pde) { 1759 1777 err = -ENOMEM; 1760 1778 goto out;
+2 -14
net/netfilter/ipvs/ip_vs_app.c
··· 587 587 .stop = ip_vs_app_seq_stop, 588 588 .show = ip_vs_app_seq_show, 589 589 }; 590 - 591 - static int ip_vs_app_open(struct inode *inode, struct file *file) 592 - { 593 - return seq_open_net(inode, file, &ip_vs_app_seq_ops, 594 - sizeof(struct seq_net_private)); 595 - } 596 - 597 - static const struct file_operations ip_vs_app_fops = { 598 - .open = ip_vs_app_open, 599 - .read = seq_read, 600 - .llseek = seq_lseek, 601 - .release = seq_release_net, 602 - }; 603 590 #endif 604 591 605 592 int __net_init ip_vs_app_net_init(struct netns_ipvs *ipvs) 606 593 { 607 594 INIT_LIST_HEAD(&ipvs->app_list); 608 - proc_create("ip_vs_app", 0, ipvs->net->proc_net, &ip_vs_app_fops); 595 + proc_create_net("ip_vs_app", 0, ipvs->net->proc_net, &ip_vs_app_seq_ops, 596 + sizeof(struct seq_net_private)); 609 597 return 0; 610 598 } 611 599
+5 -30
net/netfilter/ipvs/ip_vs_conn.c
··· 1136 1136 .show = ip_vs_conn_seq_show, 1137 1137 }; 1138 1138 1139 - static int ip_vs_conn_open(struct inode *inode, struct file *file) 1140 - { 1141 - return seq_open_net(inode, file, &ip_vs_conn_seq_ops, 1142 - sizeof(struct ip_vs_iter_state)); 1143 - } 1144 - 1145 - static const struct file_operations ip_vs_conn_fops = { 1146 - .open = ip_vs_conn_open, 1147 - .read = seq_read, 1148 - .llseek = seq_lseek, 1149 - .release = seq_release_net, 1150 - }; 1151 - 1152 1139 static const char *ip_vs_origin_name(unsigned int flags) 1153 1140 { 1154 1141 if (flags & IP_VS_CONN_F_SYNC) ··· 1199 1212 .stop = ip_vs_conn_seq_stop, 1200 1213 .show = ip_vs_conn_sync_seq_show, 1201 1214 }; 1202 - 1203 - static int ip_vs_conn_sync_open(struct inode *inode, struct file *file) 1204 - { 1205 - return seq_open_net(inode, file, &ip_vs_conn_sync_seq_ops, 1206 - sizeof(struct ip_vs_iter_state)); 1207 - } 1208 - 1209 - static const struct file_operations ip_vs_conn_sync_fops = { 1210 - .open = ip_vs_conn_sync_open, 1211 - .read = seq_read, 1212 - .llseek = seq_lseek, 1213 - .release = seq_release_net, 1214 - }; 1215 - 1216 1215 #endif 1217 1216 1218 1217 ··· 1358 1385 { 1359 1386 atomic_set(&ipvs->conn_count, 0); 1360 1387 1361 - proc_create("ip_vs_conn", 0, ipvs->net->proc_net, &ip_vs_conn_fops); 1362 - proc_create("ip_vs_conn_sync", 0, ipvs->net->proc_net, 1363 - &ip_vs_conn_sync_fops); 1388 + proc_create_net("ip_vs_conn", 0, ipvs->net->proc_net, 1389 + &ip_vs_conn_seq_ops, sizeof(struct ip_vs_iter_state)); 1390 + proc_create_net("ip_vs_conn_sync", 0, ipvs->net->proc_net, 1391 + &ip_vs_conn_sync_seq_ops, 1392 + sizeof(struct ip_vs_iter_state)); 1364 1393 return 0; 1365 1394 } 1366 1395
+2 -14
net/netfilter/ipvs/ip_vs_ctl.c
··· 2109 2109 .show = ip_vs_info_seq_show, 2110 2110 }; 2111 2111 2112 - static int ip_vs_info_open(struct inode *inode, struct file *file) 2113 - { 2114 - return seq_open_net(inode, file, &ip_vs_info_seq_ops, 2115 - sizeof(struct ip_vs_iter)); 2116 - } 2117 - 2118 - static const struct file_operations ip_vs_info_fops = { 2119 - .open = ip_vs_info_open, 2120 - .read = seq_read, 2121 - .llseek = seq_lseek, 2122 - .release = seq_release_net, 2123 - }; 2124 - 2125 2112 static int ip_vs_stats_show(struct seq_file *seq, void *v) 2126 2113 { 2127 2114 struct net *net = seq_file_single_net(seq); ··· 4017 4030 4018 4031 spin_lock_init(&ipvs->tot_stats.lock); 4019 4032 4020 - proc_create("ip_vs", 0, ipvs->net->proc_net, &ip_vs_info_fops); 4033 + proc_create_net("ip_vs", 0, ipvs->net->proc_net, &ip_vs_info_seq_ops, 4034 + sizeof(struct ip_vs_iter)); 4021 4035 proc_create("ip_vs_stats", 0, ipvs->net->proc_net, &ip_vs_stats_fops); 4022 4036 proc_create("ip_vs_stats_percpu", 0, ipvs->net->proc_net, 4023 4037 &ip_vs_stats_percpu_fops);
+2 -15
net/netfilter/nf_conntrack_expect.c
··· 644 644 .stop = exp_seq_stop, 645 645 .show = exp_seq_show 646 646 }; 647 - 648 - static int exp_open(struct inode *inode, struct file *file) 649 - { 650 - return seq_open_net(inode, file, &exp_seq_ops, 651 - sizeof(struct ct_expect_iter_state)); 652 - } 653 - 654 - static const struct file_operations exp_file_ops = { 655 - .open = exp_open, 656 - .read = seq_read, 657 - .llseek = seq_lseek, 658 - .release = seq_release_net, 659 - }; 660 647 #endif /* CONFIG_NF_CONNTRACK_PROCFS */ 661 648 662 649 static int exp_proc_init(struct net *net) ··· 653 666 kuid_t root_uid; 654 667 kgid_t root_gid; 655 668 656 - proc = proc_create("nf_conntrack_expect", 0440, net->proc_net, 657 - &exp_file_ops); 669 + proc = proc_create_net("nf_conntrack_expect", 0440, net->proc_net, 670 + &exp_seq_ops, sizeof(struct ct_expect_iter_state)); 658 671 if (!proc) 659 672 return -ENOMEM; 660 673
+4 -29
net/netfilter/nf_conntrack_standalone.c
··· 375 375 .show = ct_seq_show 376 376 }; 377 377 378 - static int ct_open(struct inode *inode, struct file *file) 379 - { 380 - return seq_open_net(inode, file, &ct_seq_ops, 381 - sizeof(struct ct_iter_state)); 382 - } 383 - 384 - static const struct file_operations ct_file_ops = { 385 - .open = ct_open, 386 - .read = seq_read, 387 - .llseek = seq_lseek, 388 - .release = seq_release_net, 389 - }; 390 - 391 378 static void *ct_cpu_seq_start(struct seq_file *seq, loff_t *pos) 392 379 { 393 380 struct net *net = seq_file_net(seq); ··· 454 467 .show = ct_cpu_seq_show, 455 468 }; 456 469 457 - static int ct_cpu_seq_open(struct inode *inode, struct file *file) 458 - { 459 - return seq_open_net(inode, file, &ct_cpu_seq_ops, 460 - sizeof(struct seq_net_private)); 461 - } 462 - 463 - static const struct file_operations ct_cpu_seq_fops = { 464 - .open = ct_cpu_seq_open, 465 - .read = seq_read, 466 - .llseek = seq_lseek, 467 - .release = seq_release_net, 468 - }; 469 - 470 470 static int nf_conntrack_standalone_init_proc(struct net *net) 471 471 { 472 472 struct proc_dir_entry *pde; 473 473 kuid_t root_uid; 474 474 kgid_t root_gid; 475 475 476 - pde = proc_create("nf_conntrack", 0440, net->proc_net, &ct_file_ops); 476 + pde = proc_create_net("nf_conntrack", 0440, net->proc_net, &ct_seq_ops, 477 + sizeof(struct ct_iter_state)); 477 478 if (!pde) 478 479 goto out_nf_conntrack; 479 480 ··· 470 495 if (uid_valid(root_uid) && gid_valid(root_gid)) 471 496 proc_set_user(pde, root_uid, root_gid); 472 497 473 - pde = proc_create("nf_conntrack", 0444, net->proc_net_stat, 474 - &ct_cpu_seq_fops); 498 + pde = proc_create_net("nf_conntrack", 0444, net->proc_net_stat, 499 + &ct_cpu_seq_ops, sizeof(struct seq_net_private)); 475 500 if (!pde) 476 501 goto out_stat_nf_conntrack; 477 502 return 0;
+2 -17
net/netfilter/nf_log.c
··· 394 394 .stop = seq_stop, 395 395 .show = seq_show, 396 396 }; 397 - 398 - static int nflog_open(struct inode *inode, struct file *file) 399 - { 400 - return seq_open_net(inode, file, &nflog_seq_ops, 401 - sizeof(struct seq_net_private)); 402 - } 403 - 404 - static const struct file_operations nflog_file_ops = { 405 - .open = nflog_open, 406 - .read = seq_read, 407 - .llseek = seq_lseek, 408 - .release = seq_release_net, 409 - }; 410 - 411 - 412 397 #endif /* PROC_FS */ 413 398 414 399 #ifdef CONFIG_SYSCTL ··· 534 549 int ret = -ENOMEM; 535 550 536 551 #ifdef CONFIG_PROC_FS 537 - if (!proc_create("nf_log", 0444, 538 - net->nf.proc_netfilter, &nflog_file_ops)) 552 + if (!proc_create_net("nf_log", 0444, net->nf.proc_netfilter, 553 + &nflog_seq_ops, sizeof(struct seq_net_private))) 539 554 return ret; 540 555 #endif 541 556 ret = netfilter_log_sysctl_init(net);
+2 -15
net/netfilter/nf_synproxy_core.c
··· 310 310 .show = synproxy_cpu_seq_show, 311 311 }; 312 312 313 - static int synproxy_cpu_seq_open(struct inode *inode, struct file *file) 314 - { 315 - return seq_open_net(inode, file, &synproxy_cpu_seq_ops, 316 - sizeof(struct seq_net_private)); 317 - } 318 - 319 - static const struct file_operations synproxy_cpu_seq_fops = { 320 - .open = synproxy_cpu_seq_open, 321 - .read = seq_read, 322 - .llseek = seq_lseek, 323 - .release = seq_release_net, 324 - }; 325 - 326 313 static int __net_init synproxy_proc_init(struct net *net) 327 314 { 328 - if (!proc_create("synproxy", 0444, net->proc_net_stat, 329 - &synproxy_cpu_seq_fops)) 315 + if (!proc_create_net("synproxy", 0444, net->proc_net_stat, 316 + &synproxy_cpu_seq_ops, sizeof(struct seq_net_private))) 330 317 return -ENOMEM; 331 318 return 0; 332 319 }
+3 -15
net/netfilter/x_tables.c
··· 1529 1529 .show = xt_table_seq_show, 1530 1530 }; 1531 1531 1532 - static int xt_table_open(struct inode *inode, struct file *file) 1533 - { 1534 - return seq_open_net(inode, file, &xt_table_seq_ops, 1535 - sizeof(struct seq_net_private)); 1536 - } 1537 - 1538 - static const struct file_operations xt_table_ops = { 1539 - .open = xt_table_open, 1540 - .read = seq_read, 1541 - .llseek = seq_lseek, 1542 - .release = seq_release_net, 1543 - }; 1544 - 1545 1532 /* 1546 1533 * Traverse state for ip{,6}_{tables,matches} for helping crossing 1547 1534 * the multi-AF mutexes. ··· 1777 1790 1778 1791 strlcpy(buf, xt_prefix[af], sizeof(buf)); 1779 1792 strlcat(buf, FORMAT_TABLES, sizeof(buf)); 1780 - proc = proc_create_data(buf, 0440, net->proc_net, &xt_table_ops, 1781 - (void *)(unsigned long)af); 1793 + proc = proc_create_net_data(buf, 0440, net->proc_net, &xt_table_seq_ops, 1794 + sizeof(struct seq_net_private), 1795 + (void *)(unsigned long)af); 1782 1796 if (!proc) 1783 1797 goto out; 1784 1798 if (uid_valid(root_uid) && gid_valid(root_gid))
+2 -16
net/netlink/af_netlink.c
··· 2635 2635 .stop = netlink_seq_stop, 2636 2636 .show = netlink_seq_show, 2637 2637 }; 2638 - 2639 - 2640 - static int netlink_seq_open(struct inode *inode, struct file *file) 2641 - { 2642 - return seq_open_net(inode, file, &netlink_seq_ops, 2643 - sizeof(struct nl_seq_iter)); 2644 - } 2645 - 2646 - static const struct file_operations netlink_seq_fops = { 2647 - .open = netlink_seq_open, 2648 - .read = seq_read, 2649 - .llseek = seq_lseek, 2650 - .release = seq_release_net, 2651 - }; 2652 - 2653 2638 #endif 2654 2639 2655 2640 int netlink_register_notifier(struct notifier_block *nb) ··· 2679 2694 static int __net_init netlink_net_init(struct net *net) 2680 2695 { 2681 2696 #ifdef CONFIG_PROC_FS 2682 - if (!proc_create("netlink", 0, net->proc_net, &netlink_seq_fops)) 2697 + if (!proc_create_net("netlink", 0, net->proc_net, &netlink_seq_ops, 2698 + sizeof(struct nl_seq_iter))) 2683 2699 return -ENOMEM; 2684 2700 #endif 2685 2701 return 0;
+2 -15
net/packet/af_packet.c
··· 4554 4554 .stop = packet_seq_stop, 4555 4555 .show = packet_seq_show, 4556 4556 }; 4557 - 4558 - static int packet_seq_open(struct inode *inode, struct file *file) 4559 - { 4560 - return seq_open_net(inode, file, &packet_seq_ops, 4561 - sizeof(struct seq_net_private)); 4562 - } 4563 - 4564 - static const struct file_operations packet_seq_fops = { 4565 - .open = packet_seq_open, 4566 - .read = seq_read, 4567 - .llseek = seq_lseek, 4568 - .release = seq_release_net, 4569 - }; 4570 - 4571 4557 #endif 4572 4558 4573 4559 static int __net_init packet_net_init(struct net *net) ··· 4561 4575 mutex_init(&net->packet.sklist_lock); 4562 4576 INIT_HLIST_HEAD(&net->packet.sklist); 4563 4577 4564 - if (!proc_create("packet", 0, net->proc_net, &packet_seq_fops)) 4578 + if (!proc_create_net("packet", 0, net->proc_net, &packet_seq_ops, 4579 + sizeof(struct seq_net_private))) 4565 4580 return -ENOMEM; 4566 4581 4567 4582 return 0;
+4 -2
net/phonet/pn_dev.c
··· 320 320 { 321 321 struct phonet_net *pnn = phonet_pernet(net); 322 322 323 - if (!proc_create("phonet", 0, net->proc_net, &pn_sock_seq_fops)) 323 + if (!proc_create_net("phonet", 0, net->proc_net, &pn_sock_seq_ops, 324 + sizeof(struct seq_net_private))) 324 325 return -ENOMEM; 325 326 326 327 INIT_LIST_HEAD(&pnn->pndevs.list); ··· 352 351 if (err) 353 352 return err; 354 353 355 - proc_create("pnresource", 0, init_net.proc_net, &pn_res_seq_fops); 354 + proc_create_net("pnresource", 0, init_net.proc_net, &pn_res_seq_ops, 355 + sizeof(struct seq_net_private)); 356 356 register_netdevice_notifier(&phonet_device_notifier); 357 357 err = phonet_netlink_register(); 358 358 if (err)
+2 -28
net/phonet/socket.c
··· 620 620 return 0; 621 621 } 622 622 623 - static const struct seq_operations pn_sock_seq_ops = { 623 + const struct seq_operations pn_sock_seq_ops = { 624 624 .start = pn_sock_seq_start, 625 625 .next = pn_sock_seq_next, 626 626 .stop = pn_sock_seq_stop, 627 627 .show = pn_sock_seq_show, 628 - }; 629 - 630 - static int pn_sock_open(struct inode *inode, struct file *file) 631 - { 632 - return seq_open_net(inode, file, &pn_sock_seq_ops, 633 - sizeof(struct seq_net_private)); 634 - } 635 - 636 - const struct file_operations pn_sock_seq_fops = { 637 - .open = pn_sock_open, 638 - .read = seq_read, 639 - .llseek = seq_lseek, 640 - .release = seq_release_net, 641 628 }; 642 629 #endif 643 630 ··· 789 802 return 0; 790 803 } 791 804 792 - static const struct seq_operations pn_res_seq_ops = { 805 + const struct seq_operations pn_res_seq_ops = { 793 806 .start = pn_res_seq_start, 794 807 .next = pn_res_seq_next, 795 808 .stop = pn_res_seq_stop, 796 809 .show = pn_res_seq_show, 797 - }; 798 - 799 - static int pn_res_open(struct inode *inode, struct file *file) 800 - { 801 - return seq_open_net(inode, file, &pn_res_seq_ops, 802 - sizeof(struct seq_net_private)); 803 - } 804 - 805 - const struct file_operations pn_res_seq_fops = { 806 - .open = pn_res_open, 807 - .read = seq_read, 808 - .llseek = seq_lseek, 809 - .release = seq_release_net, 810 810 }; 811 811 #endif
+2 -2
net/rxrpc/ar-internal.h
··· 1051 1051 /* 1052 1052 * proc.c 1053 1053 */ 1054 - extern const struct file_operations rxrpc_call_seq_fops; 1055 - extern const struct file_operations rxrpc_connection_seq_fops; 1054 + extern const struct seq_operations rxrpc_call_seq_ops; 1055 + extern const struct seq_operations rxrpc_connection_seq_ops; 1056 1056 1057 1057 /* 1058 1058 * recvmsg.c
+5 -2
net/rxrpc/net_ns.c
··· 97 97 if (!rxnet->proc_net) 98 98 goto err_proc; 99 99 100 - proc_create("calls", 0444, rxnet->proc_net, &rxrpc_call_seq_fops); 101 - proc_create("conns", 0444, rxnet->proc_net, &rxrpc_connection_seq_fops); 100 + proc_create_net("calls", 0444, rxnet->proc_net, &rxrpc_call_seq_ops, 101 + sizeof(struct seq_net_private)); 102 + proc_create_net("conns", 0444, rxnet->proc_net, 103 + &rxrpc_connection_seq_ops, 104 + sizeof(struct seq_net_private)); 102 105 return 0; 103 106 104 107 err_proc:
+2 -29
net/rxrpc/proc.c
··· 115 115 return 0; 116 116 } 117 117 118 - static const struct seq_operations rxrpc_call_seq_ops = { 118 + const struct seq_operations rxrpc_call_seq_ops = { 119 119 .start = rxrpc_call_seq_start, 120 120 .next = rxrpc_call_seq_next, 121 121 .stop = rxrpc_call_seq_stop, 122 122 .show = rxrpc_call_seq_show, 123 - }; 124 - 125 - static int rxrpc_call_seq_open(struct inode *inode, struct file *file) 126 - { 127 - return seq_open_net(inode, file, &rxrpc_call_seq_ops, 128 - sizeof(struct seq_net_private)); 129 - } 130 - 131 - const struct file_operations rxrpc_call_seq_fops = { 132 - .open = rxrpc_call_seq_open, 133 - .read = seq_read, 134 - .llseek = seq_lseek, 135 - .release = seq_release, 136 123 }; 137 124 138 125 /* ··· 194 207 return 0; 195 208 } 196 209 197 - static const struct seq_operations rxrpc_connection_seq_ops = { 210 + const struct seq_operations rxrpc_connection_seq_ops = { 198 211 .start = rxrpc_connection_seq_start, 199 212 .next = rxrpc_connection_seq_next, 200 213 .stop = rxrpc_connection_seq_stop, 201 214 .show = rxrpc_connection_seq_show, 202 - }; 203 - 204 - 205 - static int rxrpc_connection_seq_open(struct inode *inode, struct file *file) 206 - { 207 - return seq_open_net(inode, file, &rxrpc_connection_seq_ops, 208 - sizeof(struct seq_net_private)); 209 - } 210 - 211 - const struct file_operations rxrpc_connection_seq_fops = { 212 - .open = rxrpc_connection_seq_open, 213 - .read = seq_read, 214 - .llseek = seq_lseek, 215 - .release = seq_release, 216 215 };
+6 -48
net/sctp/proc.c
··· 225 225 .show = sctp_eps_seq_show, 226 226 }; 227 227 228 - 229 - /* Initialize the seq file operations for 'eps' object. */ 230 - static int sctp_eps_seq_open(struct inode *inode, struct file *file) 231 - { 232 - return seq_open_net(inode, file, &sctp_eps_ops, 233 - sizeof(struct seq_net_private)); 234 - } 235 - 236 - static const struct file_operations sctp_eps_seq_fops = { 237 - .open = sctp_eps_seq_open, 238 - .read = seq_read, 239 - .llseek = seq_lseek, 240 - .release = seq_release_net, 241 - }; 242 - 243 228 struct sctp_ht_iter { 244 229 struct seq_net_private p; 245 230 struct rhashtable_iter hti; ··· 323 338 .show = sctp_assocs_seq_show, 324 339 }; 325 340 326 - /* Initialize the seq file operations for 'assocs' object. */ 327 - static int sctp_assocs_seq_open(struct inode *inode, struct file *file) 328 - { 329 - return seq_open_net(inode, file, &sctp_assoc_ops, 330 - sizeof(struct sctp_ht_iter)); 331 - } 332 - 333 - static const struct file_operations sctp_assocs_seq_fops = { 334 - .open = sctp_assocs_seq_open, 335 - .read = seq_read, 336 - .llseek = seq_lseek, 337 - .release = seq_release_net, 338 - }; 339 - 340 341 static int sctp_remaddr_seq_show(struct seq_file *seq, void *v) 341 342 { 342 343 struct sctp_association *assoc; ··· 402 431 .show = sctp_remaddr_seq_show, 403 432 }; 404 433 405 - static int sctp_remaddr_seq_open(struct inode *inode, struct file *file) 406 - { 407 - return seq_open_net(inode, file, &sctp_remaddr_ops, 408 - sizeof(struct sctp_ht_iter)); 409 - } 410 - 411 - static const struct file_operations sctp_remaddr_seq_fops = { 412 - .open = sctp_remaddr_seq_open, 413 - .read = seq_read, 414 - .llseek = seq_lseek, 415 - .release = seq_release_net, 416 - }; 417 - 418 434 /* Set up the proc fs entry for the SCTP protocol. */ 419 435 int __net_init sctp_proc_init(struct net *net) 420 436 { ··· 411 453 if (!proc_create("snmp", 0444, net->sctp.proc_net_sctp, 412 454 &sctp_snmp_seq_fops)) 413 455 goto cleanup; 414 - if (!proc_create("eps", 0444, net->sctp.proc_net_sctp, 415 - &sctp_eps_seq_fops)) 456 + if (!proc_create_net("eps", 0444, net->sctp.proc_net_sctp, 457 + &sctp_eps_ops, sizeof(struct seq_net_private))) 416 458 goto cleanup; 417 - if (!proc_create("assocs", 0444, net->sctp.proc_net_sctp, 418 - &sctp_assocs_seq_fops)) 459 + if (!proc_create_net("assocs", 0444, net->sctp.proc_net_sctp, 460 + &sctp_assoc_ops, sizeof(struct sctp_ht_iter))) 419 461 goto cleanup; 420 - if (!proc_create("remaddr", 0444, net->sctp.proc_net_sctp, 421 - &sctp_remaddr_seq_fops)) 462 + if (!proc_create_net("remaddr", 0444, net->sctp.proc_net_sctp, 463 + &sctp_remaddr_ops, sizeof(struct sctp_ht_iter))) 422 464 goto cleanup; 423 465 return 0; 424 466
+2 -15
net/unix/af_unix.c
··· 2852 2852 .stop = unix_seq_stop, 2853 2853 .show = unix_seq_show, 2854 2854 }; 2855 - 2856 - static int unix_seq_open(struct inode *inode, struct file *file) 2857 - { 2858 - return seq_open_net(inode, file, &unix_seq_ops, 2859 - sizeof(struct seq_net_private)); 2860 - } 2861 - 2862 - static const struct file_operations unix_seq_fops = { 2863 - .open = unix_seq_open, 2864 - .read = seq_read, 2865 - .llseek = seq_lseek, 2866 - .release = seq_release_net, 2867 - }; 2868 - 2869 2855 #endif 2870 2856 2871 2857 static const struct net_proto_family unix_family_ops = { ··· 2870 2884 goto out; 2871 2885 2872 2886 #ifdef CONFIG_PROC_FS 2873 - if (!proc_create("unix", 0, net->proc_net, &unix_seq_fops)) { 2887 + if (!proc_create_net("unix", 0, net->proc_net, &unix_seq_ops, 2888 + sizeof(struct seq_net_private))) { 2874 2889 unix_sysctl_unregister(net); 2875 2890 goto out; 2876 2891 }
+2 -15
net/wireless/wext-proc.c
··· 126 126 .show = wireless_dev_seq_show, 127 127 }; 128 128 129 - static int seq_open_wireless(struct inode *inode, struct file *file) 130 - { 131 - return seq_open_net(inode, file, &wireless_seq_ops, 132 - sizeof(struct seq_net_private)); 133 - } 134 - 135 - static const struct file_operations wireless_seq_fops = { 136 - .open = seq_open_wireless, 137 - .read = seq_read, 138 - .llseek = seq_lseek, 139 - .release = seq_release_net, 140 - }; 141 - 142 129 int __net_init wext_proc_init(struct net *net) 143 130 { 144 131 /* Create /proc/net/wireless entry */ 145 - if (!proc_create("wireless", 0444, net->proc_net, 146 - &wireless_seq_fops)) 132 + if (!proc_create_net("wireless", 0444, net->proc_net, 133 + &wireless_seq_ops, sizeof(struct seq_net_private))) 147 134 return -ENOMEM; 148 135 149 136 return 0;