[PATCH] sysctl: remove insert_at_head from register_sysctl
[safe/jmp/linux-2.6] / fs / coda / sysctl.c
index f0b1075..c57a1fa 100644 (file)
  *
  */
 
-#include <linux/config.h>
 #include <linux/time.h>
 #include <linux/mm.h>
 #include <linux/sysctl.h>
 #include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 #include <linux/slab.h>
 #include <linux/stat.h>
 #include <linux/ctype.h>
@@ -33,8 +33,6 @@
 
 static struct ctl_table_header *fs_table_header;
 
-#define FS_CODA         1       /* Coda file system */
-
 #define CODA_TIMEOUT    3       /* timeout on upcalls to become intrble */
 #define CODA_HARD       5       /* mount type "hard" or "soft" */
 #define CODA_VFS        6       /* vfs statistics */
@@ -85,15 +83,11 @@ static int do_reset_coda_cache_inv_stats( ctl_table * table, int write,
        return 0;
 }
 
-static int coda_vfs_stats_get_info( char * buffer, char ** start,
-                                   off_t offset, int length)
+static int proc_vfs_stats_show(struct seq_file *m, void *v)
 {
-       int len=0;
-       off_t begin;
        struct coda_vfs_stats * ps = & coda_vfs_stat;
   
-  /* this works as long as we are below 1024 characters! */
-       len += sprintf( buffer,
+       seq_printf(m,
                        "Coda VFS statistics\n"
                        "===================\n\n"
                        "File Operations:\n"
@@ -133,28 +127,14 @@ static int coda_vfs_stats_get_info( char * buffer, char ** start,
                        ps->rmdir,
                        ps->rename,
                        ps->permission); 
-
-       begin = offset;
-       *start = buffer + begin;
-       len -= begin;
-
-       if ( len > length )
-               len = length;
-       if ( len < 0 )
-               len = 0;
-
-       return len;
+       return 0;
 }
 
-static int coda_cache_inv_stats_get_info( char * buffer, char ** start,
-                                         off_t offset, int length)
+static int proc_cache_inv_stats_show(struct seq_file *m, void *v)
 {
-       int len=0;
-       off_t begin;
        struct coda_cache_inv_stats * ps = & coda_cache_inv_stat;
   
-       /* this works as long as we are below 1024 characters! */
-       len += sprintf( buffer,
+       seq_printf(m,
                        "Coda cache invalidation statistics\n"
                        "==================================\n\n"
                        "flush\t\t%9d\n"
@@ -171,31 +151,87 @@ static int coda_cache_inv_stats_get_info( char * buffer, char ** start,
                        ps->zap_vnode,
                        ps->purge_fid,
                        ps->replace );
-  
-       begin = offset;
-       *start = buffer + begin;
-       len -= begin;
+       return 0;
+}
 
-       if ( len > length )
-               len = length;
-       if ( len < 0 )
-               len = 0;
+static int proc_vfs_stats_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, proc_vfs_stats_show, NULL);
+}
 
-       return len;
+static int proc_cache_inv_stats_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, proc_cache_inv_stats_show, NULL);
 }
 
+static const struct file_operations proc_vfs_stats_fops = {
+       .owner          = THIS_MODULE,
+       .open           = proc_vfs_stats_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static const struct file_operations proc_cache_inv_stats_fops = {
+       .owner          = THIS_MODULE,
+       .open           = proc_cache_inv_stats_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
 static ctl_table coda_table[] = {
-       {CODA_TIMEOUT, "timeout", &coda_timeout, sizeof(int), 0644, NULL, &proc_dointvec},
-       {CODA_HARD, "hard", &coda_hard, sizeof(int), 0644, NULL, &proc_dointvec},
-       {CODA_VFS, "vfs_stats", NULL, 0, 0644, NULL, &do_reset_coda_vfs_stats},
-       {CODA_CACHE_INV, "cache_inv_stats", NULL, 0, 0644, NULL, &do_reset_coda_cache_inv_stats},
-       {CODA_FAKE_STATFS, "fake_statfs", &coda_fake_statfs, sizeof(int), 0600, NULL, &proc_dointvec},
-       { 0 }
+       {
+               .ctl_name       = CTL_UNNUMBERED,
+               .procname       = "timeout",
+               .data           = &coda_timeout,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = &proc_dointvec
+       },
+       {
+               .ctl_name       = CTL_UNNUMBERED,
+               .procname       = "hard",
+               .data           = &coda_hard,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = &proc_dointvec
+       },
+       {
+               .ctl_name       = CTL_UNNUMBERED,
+               .procname       = "vfs_stats",
+               .data           = NULL,
+               .maxlen         = 0,
+               .mode           = 0644,
+               .proc_handler   = &do_reset_coda_vfs_stats
+       },
+       {
+               .ctl_name       = CTL_UNNUMBERED,
+               .procname       = "cache_inv_stats",
+               .data           = NULL,
+               .maxlen         = 0,
+               .mode           = 0644,
+               .proc_handler   = &do_reset_coda_cache_inv_stats
+       },
+       {
+               .ctl_name       = CTL_UNNUMBERED,
+               .procname       = "fake_statfs",
+               .data           = &coda_fake_statfs,
+               .maxlen         = sizeof(int),
+               .mode           = 0600,
+               .proc_handler   = &proc_dointvec
+       },
+       {}
 };
 
 static ctl_table fs_table[] = {
-       {FS_CODA, "coda",    NULL, 0, 0555, coda_table},
-       {0}
+       {
+               .ctl_name       = CTL_UNNUMBERED,
+               .procname       = "coda",
+               .mode           = 0555,
+               .child          = coda_table
+       },
+       {}
 };
 
 
@@ -213,9 +249,6 @@ static struct proc_dir_entry* proc_fs_coda;
 
 #endif
 
-#define coda_proc_create(name,get_info) \
-       create_proc_info_entry(name, 0, proc_fs_coda, get_info)
-
 void coda_sysctl_init(void)
 {
        reset_coda_vfs_stats();
@@ -224,15 +257,21 @@ void coda_sysctl_init(void)
 #ifdef CONFIG_PROC_FS
        proc_fs_coda = proc_mkdir("coda", proc_root_fs);
        if (proc_fs_coda) {
+               struct proc_dir_entry *pde;
+
                proc_fs_coda->owner = THIS_MODULE;
-               coda_proc_create("vfs_stats", coda_vfs_stats_get_info);
-               coda_proc_create("cache_inv_stats", coda_cache_inv_stats_get_info);
+               pde = create_proc_entry("vfs_stats", 0, proc_fs_coda);
+               if (pde)
+                       pde->proc_fops = &proc_vfs_stats_fops;
+               pde = create_proc_entry("cache_inv_stats", 0, proc_fs_coda);
+               if (pde)
+                       pde->proc_fops = &proc_cache_inv_stats_fops;
        }
 #endif
 
 #ifdef CONFIG_SYSCTL
        if ( !fs_table_header )
-               fs_table_header = register_sysctl_table(fs_table, 0);
+               fs_table_header = register_sysctl_table(fs_table);
 #endif 
 }