diff options
Diffstat (limited to 'net/sctp/proc.c')
-rw-r--r-- | net/sctp/proc.c | 90 |
1 files changed, 21 insertions, 69 deletions
diff --git a/net/sctp/proc.c b/net/sctp/proc.c index 537545ebcb0e..17d0155d9de3 100644 --- a/net/sctp/proc.c +++ b/net/sctp/proc.c | |||
@@ -101,25 +101,6 @@ static const struct file_operations sctp_snmp_seq_fops = { | |||
101 | .release = single_release_net, | 101 | .release = single_release_net, |
102 | }; | 102 | }; |
103 | 103 | ||
104 | /* Set up the proc fs entry for 'snmp' object. */ | ||
105 | int __net_init sctp_snmp_proc_init(struct net *net) | ||
106 | { | ||
107 | struct proc_dir_entry *p; | ||
108 | |||
109 | p = proc_create("snmp", S_IRUGO, net->sctp.proc_net_sctp, | ||
110 | &sctp_snmp_seq_fops); | ||
111 | if (!p) | ||
112 | return -ENOMEM; | ||
113 | |||
114 | return 0; | ||
115 | } | ||
116 | |||
117 | /* Cleanup the proc fs entry for 'snmp' object. */ | ||
118 | void sctp_snmp_proc_exit(struct net *net) | ||
119 | { | ||
120 | remove_proc_entry("snmp", net->sctp.proc_net_sctp); | ||
121 | } | ||
122 | |||
123 | /* Dump local addresses of an association/endpoint. */ | 104 | /* Dump local addresses of an association/endpoint. */ |
124 | static void sctp_seq_dump_local_addrs(struct seq_file *seq, struct sctp_ep_common *epb) | 105 | static void sctp_seq_dump_local_addrs(struct seq_file *seq, struct sctp_ep_common *epb) |
125 | { | 106 | { |
@@ -259,25 +240,6 @@ static const struct file_operations sctp_eps_seq_fops = { | |||
259 | .release = seq_release_net, | 240 | .release = seq_release_net, |
260 | }; | 241 | }; |
261 | 242 | ||
262 | /* Set up the proc fs entry for 'eps' object. */ | ||
263 | int __net_init sctp_eps_proc_init(struct net *net) | ||
264 | { | ||
265 | struct proc_dir_entry *p; | ||
266 | |||
267 | p = proc_create("eps", S_IRUGO, net->sctp.proc_net_sctp, | ||
268 | &sctp_eps_seq_fops); | ||
269 | if (!p) | ||
270 | return -ENOMEM; | ||
271 | |||
272 | return 0; | ||
273 | } | ||
274 | |||
275 | /* Cleanup the proc fs entry for 'eps' object. */ | ||
276 | void sctp_eps_proc_exit(struct net *net) | ||
277 | { | ||
278 | remove_proc_entry("eps", net->sctp.proc_net_sctp); | ||
279 | } | ||
280 | |||
281 | struct sctp_ht_iter { | 243 | struct sctp_ht_iter { |
282 | struct seq_net_private p; | 244 | struct seq_net_private p; |
283 | struct rhashtable_iter hti; | 245 | struct rhashtable_iter hti; |
@@ -390,25 +352,6 @@ static const struct file_operations sctp_assocs_seq_fops = { | |||
390 | .release = seq_release_net, | 352 | .release = seq_release_net, |
391 | }; | 353 | }; |
392 | 354 | ||
393 | /* Set up the proc fs entry for 'assocs' object. */ | ||
394 | int __net_init sctp_assocs_proc_init(struct net *net) | ||
395 | { | ||
396 | struct proc_dir_entry *p; | ||
397 | |||
398 | p = proc_create("assocs", S_IRUGO, net->sctp.proc_net_sctp, | ||
399 | &sctp_assocs_seq_fops); | ||
400 | if (!p) | ||
401 | return -ENOMEM; | ||
402 | |||
403 | return 0; | ||
404 | } | ||
405 | |||
406 | /* Cleanup the proc fs entry for 'assocs' object. */ | ||
407 | void sctp_assocs_proc_exit(struct net *net) | ||
408 | { | ||
409 | remove_proc_entry("assocs", net->sctp.proc_net_sctp); | ||
410 | } | ||
411 | |||
412 | static int sctp_remaddr_seq_show(struct seq_file *seq, void *v) | 355 | static int sctp_remaddr_seq_show(struct seq_file *seq, void *v) |
413 | { | 356 | { |
414 | struct sctp_association *assoc; | 357 | struct sctp_association *assoc; |
@@ -488,12 +431,6 @@ static const struct seq_operations sctp_remaddr_ops = { | |||
488 | .show = sctp_remaddr_seq_show, | 431 | .show = sctp_remaddr_seq_show, |
489 | }; | 432 | }; |
490 | 433 | ||
491 | /* Cleanup the proc fs entry for 'remaddr' object. */ | ||
492 | void sctp_remaddr_proc_exit(struct net *net) | ||
493 | { | ||
494 | remove_proc_entry("remaddr", net->sctp.proc_net_sctp); | ||
495 | } | ||
496 | |||
497 | static int sctp_remaddr_seq_open(struct inode *inode, struct file *file) | 434 | static int sctp_remaddr_seq_open(struct inode *inode, struct file *file) |
498 | { | 435 | { |
499 | return seq_open_net(inode, file, &sctp_remaddr_ops, | 436 | return seq_open_net(inode, file, &sctp_remaddr_ops, |
@@ -507,13 +444,28 @@ static const struct file_operations sctp_remaddr_seq_fops = { | |||
507 | .release = seq_release_net, | 444 | .release = seq_release_net, |
508 | }; | 445 | }; |
509 | 446 | ||
510 | int __net_init sctp_remaddr_proc_init(struct net *net) | 447 | /* Set up the proc fs entry for the SCTP protocol. */ |
448 | int __net_init sctp_proc_init(struct net *net) | ||
511 | { | 449 | { |
512 | struct proc_dir_entry *p; | 450 | net->sctp.proc_net_sctp = proc_net_mkdir(net, "sctp", net->proc_net); |
513 | 451 | if (!net->sctp.proc_net_sctp) | |
514 | p = proc_create("remaddr", S_IRUGO, net->sctp.proc_net_sctp, | ||
515 | &sctp_remaddr_seq_fops); | ||
516 | if (!p) | ||
517 | return -ENOMEM; | 452 | return -ENOMEM; |
453 | if (!proc_create("snmp", S_IRUGO, net->sctp.proc_net_sctp, | ||
454 | &sctp_snmp_seq_fops)) | ||
455 | goto cleanup; | ||
456 | if (!proc_create("eps", S_IRUGO, net->sctp.proc_net_sctp, | ||
457 | &sctp_eps_seq_fops)) | ||
458 | goto cleanup; | ||
459 | if (!proc_create("assocs", S_IRUGO, net->sctp.proc_net_sctp, | ||
460 | &sctp_assocs_seq_fops)) | ||
461 | goto cleanup; | ||
462 | if (!proc_create("remaddr", S_IRUGO, net->sctp.proc_net_sctp, | ||
463 | &sctp_remaddr_seq_fops)) | ||
464 | goto cleanup; | ||
518 | return 0; | 465 | return 0; |
466 | |||
467 | cleanup: | ||
468 | remove_proc_subtree("sctp", net->proc_net); | ||
469 | net->sctp.proc_net_sctp = NULL; | ||
470 | return -ENOMEM; | ||
519 | } | 471 | } |