|
@@ -257,18 +257,6 @@ static const struct seq_operations atm_dev_seq_ops = {
|
|
|
.show = atm_dev_seq_show,
|
|
|
};
|
|
|
|
|
|
-static int atm_dev_seq_open(struct inode *inode, struct file *file)
|
|
|
-{
|
|
|
- return seq_open(file, &atm_dev_seq_ops);
|
|
|
-}
|
|
|
-
|
|
|
-static const struct file_operations devices_seq_fops = {
|
|
|
- .open = atm_dev_seq_open,
|
|
|
- .read = seq_read,
|
|
|
- .llseek = seq_lseek,
|
|
|
- .release = seq_release,
|
|
|
-};
|
|
|
-
|
|
|
static int pvc_seq_show(struct seq_file *seq, void *v)
|
|
|
{
|
|
|
static char atm_pvc_banner[] =
|
|
@@ -440,58 +428,19 @@ void atm_proc_dev_deregister(struct atm_dev *dev)
|
|
|
kfree(dev->proc_name);
|
|
|
}
|
|
|
|
|
|
-static struct atm_proc_entry {
|
|
|
- char *name;
|
|
|
- const struct file_operations *proc_fops;
|
|
|
- struct proc_dir_entry *dirent;
|
|
|
-} atm_proc_ents[] = {
|
|
|
- { .name = "devices", .proc_fops = &devices_seq_fops },
|
|
|
- { .name = "pvc", .proc_fops = &pvc_seq_fops },
|
|
|
- { .name = "svc", .proc_fops = &svc_seq_fops },
|
|
|
- { .name = "vc", .proc_fops = &vcc_seq_fops },
|
|
|
- { .name = NULL, .proc_fops = NULL }
|
|
|
-};
|
|
|
-
|
|
|
-static void atm_proc_dirs_remove(void)
|
|
|
-{
|
|
|
- static struct atm_proc_entry *e;
|
|
|
-
|
|
|
- for (e = atm_proc_ents; e->name; e++) {
|
|
|
- if (e->dirent)
|
|
|
- remove_proc_entry(e->name, atm_proc_root);
|
|
|
- }
|
|
|
- remove_proc_entry("atm", init_net.proc_net);
|
|
|
-}
|
|
|
-
|
|
|
int __init atm_proc_init(void)
|
|
|
{
|
|
|
- static struct atm_proc_entry *e;
|
|
|
- int ret;
|
|
|
-
|
|
|
atm_proc_root = proc_net_mkdir(&init_net, "atm", init_net.proc_net);
|
|
|
if (!atm_proc_root)
|
|
|
- goto err_out;
|
|
|
- for (e = atm_proc_ents; e->name; e++) {
|
|
|
- struct proc_dir_entry *dirent;
|
|
|
-
|
|
|
- dirent = proc_create(e->name, 0444,
|
|
|
- atm_proc_root, e->proc_fops);
|
|
|
- if (!dirent)
|
|
|
- goto err_out_remove;
|
|
|
- e->dirent = dirent;
|
|
|
- }
|
|
|
- ret = 0;
|
|
|
-out:
|
|
|
- return ret;
|
|
|
-
|
|
|
-err_out_remove:
|
|
|
- atm_proc_dirs_remove();
|
|
|
-err_out:
|
|
|
- ret = -ENOMEM;
|
|
|
- goto out;
|
|
|
+ return -ENOMEM;
|
|
|
+ proc_create_seq("devices", 0444, atm_proc_root, &atm_dev_seq_ops);
|
|
|
+ proc_create("pvc", 0444, atm_proc_root, &pvc_seq_fops);
|
|
|
+ proc_create("svc", 0444, atm_proc_root, &svc_seq_fops);
|
|
|
+ proc_create("vc", 0444, atm_proc_root, &vcc_seq_fops);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
void atm_proc_exit(void)
|
|
|
{
|
|
|
- atm_proc_dirs_remove();
|
|
|
+ remove_proc_subtree("atm", init_net.proc_net);
|
|
|
}
|