sgi-gru: simplify procfs code
authorChristoph Hellwig <hch@lst.de>
Tue, 10 Apr 2018 15:47:15 +0000 (17:47 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 16 May 2018 05:24:30 +0000 (07:24 +0200)
Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls.  Switch to use
proc_create_seq where applicable.

Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/misc/sgi-gru/gruprocfs.c

index 4f76359223949f21e54c5a0bd5a57fae83561ff2..42ea2eccaee9ed3cad18bc1e57cfb0eec888f34e 100644 (file)
@@ -270,16 +270,6 @@ static int options_open(struct inode *inode, struct file *file)
        return single_open(file, options_show, NULL);
 }
 
-static int cch_open(struct inode *inode, struct file *file)
-{
-       return seq_open(file, &cch_seq_ops);
-}
-
-static int gru_open(struct inode *inode, struct file *file)
-{
-       return seq_open(file, &gru_seq_ops);
-}
-
 /* *INDENT-OFF* */
 static const struct file_operations statistics_fops = {
        .open           = statistics_open,
@@ -305,73 +295,30 @@ static const struct file_operations options_fops = {
        .release        = single_release,
 };
 
-static const struct file_operations cch_fops = {
-       .open           = cch_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = seq_release,
-};
-static const struct file_operations gru_fops = {
-       .open           = gru_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = seq_release,
-};
-
-static struct proc_entry {
-       char *name;
-       umode_t mode;
-       const struct file_operations *fops;
-       struct proc_dir_entry *entry;
-} proc_files[] = {
-       {"statistics", 0644, &statistics_fops},
-       {"mcs_statistics", 0644, &mcs_statistics_fops},
-       {"debug_options", 0644, &options_fops},
-       {"cch_status", 0444, &cch_fops},
-       {"gru_status", 0444, &gru_fops},
-       {NULL}
-};
-/* *INDENT-ON* */
-
 static struct proc_dir_entry *proc_gru __read_mostly;
 
-static int create_proc_file(struct proc_entry *p)
-{
-       p->entry = proc_create(p->name, p->mode, proc_gru, p->fops);
-       if (!p->entry)
-               return -1;
-       return 0;
-}
-
-static void delete_proc_files(void)
-{
-       struct proc_entry *p;
-
-       if (proc_gru) {
-               for (p = proc_files; p->name; p++)
-                       if (p->entry)
-                               remove_proc_entry(p->name, proc_gru);
-               proc_remove(proc_gru);
-       }
-}
-
 int gru_proc_init(void)
 {
-       struct proc_entry *p;
-
        proc_gru = proc_mkdir("sgi_uv/gru", NULL);
-
-       for (p = proc_files; p->name; p++)
-               if (create_proc_file(p))
-                       goto err;
+       if (!proc_gru)
+               return -1;
+       if (!proc_create("statistics", 0644, proc_gru, &statistics_fops))
+               goto err;
+       if (!proc_create("mcs_statistics", 0644, proc_gru, &mcs_statistics_fops))
+               goto err;
+       if (!proc_create("debug_options", 0644, proc_gru, &options_fops))
+               goto err;
+       if (!proc_create_seq("cch_status", 0444, proc_gru, &cch_seq_ops))
+               goto err;
+       if (!proc_create_seq("gru_status", 0444, proc_gru, &gru_seq_ops))
+               goto err;
        return 0;
-
 err:
-       delete_proc_files();
+       remove_proc_subtree("sgi_uv/gru", NULL);
        return -1;
 }
 
 void gru_proc_exit(void)
 {
-       delete_proc_files();
+       remove_proc_subtree("sgi_uv/gru", NULL);
 }