atags_proc: switch to proc_create_data()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 28 Mar 2013 22:11:13 +0000 (18:11 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Apr 2013 18:13:03 +0000 (14:13 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/arm/kernel/atags_proc.c

index 42a1a1415fa6c37ee96b742d4bb3c1bdc9a6542d..8c00f75bf1ab221dccbb4245ef8727e6d33221e0 100644 (file)
@@ -9,24 +9,18 @@ struct buffer {
        char data[];
 };
 
-static int
-read_buffer(char* page, char** start, off_t off, int count,
-       int* eof, void* data)
+static ssize_t atags_read(struct file *file, char __user *buf,
+                         size_t count, loff_t *ppos)
 {
-       struct buffer *buffer = (struct buffer *)data;
-
-       if (off >= buffer->size) {
-               *eof = 1;
-               return 0;
-       }
-
-       count = min((int) (buffer->size - off), count);
-
-       memcpy(page, &buffer->data[off], count);
-
-       return count;
+       struct buffer *b = PDE(file_inode(file))->data;
+       return simple_read_from_buffer(buf, count, ppos, b->data, b->size);
 }
 
+static const struct file_operations atags_fops = {
+       .read = atags_read,
+       .llseek = default_llseek,
+};
+
 #define BOOT_PARAMS_SIZE 1536
 static char __initdata atags_copy[BOOT_PARAMS_SIZE];
 
@@ -66,9 +60,7 @@ static int __init init_atags_procfs(void)
        b->size = size;
        memcpy(b->data, atags_copy, size);
 
-       tags_entry = create_proc_read_entry("atags", 0400,
-                       NULL, read_buffer, b);
-
+       tags_entry = proc_create_data("atags", 0400, NULL, &atags_fops, b);
        if (!tags_entry)
                goto nomem;