Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
[pandora-kernel.git] / fs / jfs / jfs_debug.c
index bf6ab19..dd824d9 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/ctype.h>
 #include <linux/module.h>
 #include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 #include <asm/uaccess.h>
 #include "jfs_incore.h"
 #include "jfs_filsys.h"
 
 static struct proc_dir_entry *base;
 #ifdef CONFIG_JFS_DEBUG
-static int loglevel_read(char *page, char **start, off_t off,
-                        int count, int *eof, void *data)
+static int jfs_loglevel_proc_show(struct seq_file *m, void *v)
 {
-       int len;
-
-       len = sprintf(page, "%d\n", jfsloglevel);
-
-       len -= off;
-       *start = page + off;
-
-       if (len > count)
-               len = count;
-       else
-               *eof = 1;
-
-       if (len < 0)
-               len = 0;
+       seq_printf(m, "%d\n", jfsloglevel);
+       return 0;
+}
 
-       return len;
+static int jfs_loglevel_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, jfs_loglevel_proc_show, NULL);
 }
 
-static int loglevel_write(struct file *file, const char __user *buffer,
-                       unsigned long count, void *data)
+static ssize_t jfs_loglevel_proc_write(struct file *file,
+               const char __user *buffer, size_t count, loff_t *ppos)
 {
        char c;
 
@@ -65,22 +56,30 @@ static int loglevel_write(struct file *file, const char __user *buffer,
        jfsloglevel = c - '0';
        return count;
 }
+
+static const struct file_operations jfs_loglevel_proc_fops = {
+       .owner          = THIS_MODULE,
+       .open           = jfs_loglevel_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+       .write          = jfs_loglevel_proc_write,
+};
 #endif
 
 static struct {
        const char      *name;
-       read_proc_t     *read_fn;
-       write_proc_t    *write_fn;
+       const struct file_operations *proc_fops;
 } Entries[] = {
 #ifdef CONFIG_JFS_STATISTICS
-       { "lmstats",    jfs_lmstats_read, },
-       { "txstats",    jfs_txstats_read, },
-       { "xtstat",     jfs_xtstat_read, },
-       { "mpstat",     jfs_mpstat_read, },
+       { "lmstats",    &jfs_lmstats_proc_fops, },
+       { "txstats",    &jfs_txstats_proc_fops, },
+       { "xtstat",     &jfs_xtstat_proc_fops, },
+       { "mpstat",     &jfs_mpstat_proc_fops, },
 #endif
 #ifdef CONFIG_JFS_DEBUG
-       { "TxAnchor",   jfs_txanchor_read, },
-       { "loglevel",   loglevel_read, loglevel_write }
+       { "TxAnchor",   &jfs_txanchor_proc_fops, },
+       { "loglevel",   &jfs_loglevel_proc_fops }
 #endif
 };
 #define NPROCENT       ARRAY_SIZE(Entries)
@@ -91,15 +90,9 @@ void jfs_proc_init(void)
 
        if (!(base = proc_mkdir("fs/jfs", NULL)))
                return;
-       base->owner = THIS_MODULE;
 
-       for (i = 0; i < NPROCENT; i++) {
-               struct proc_dir_entry *p;
-               if ((p = create_proc_entry(Entries[i].name, 0, base))) {
-                       p->read_proc = Entries[i].read_fn;
-                       p->write_proc = Entries[i].write_fn;
-               }
-       }
+       for (i = 0; i < NPROCENT; i++)
+               proc_create(Entries[i].name, 0, base, Entries[i].proc_fops);
 }
 
 void jfs_proc_clean(void)