|
@@ -214,20 +214,27 @@ static int simdisk_detach(struct simdisk *dev)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static int proc_read_simdisk(char *page, char **start, off_t off,
|
|
|
- int count, int *eof, void *data)
|
|
|
+static ssize_t proc_read_simdisk(struct file *file, char __user *buf,
|
|
|
+ size_t size, loff_t *ppos)
|
|
|
{
|
|
|
- int len;
|
|
|
- struct simdisk *dev = (struct simdisk *) data;
|
|
|
- len = sprintf(page, "%s\n", dev->filename ? dev->filename : "");
|
|
|
- return len;
|
|
|
+ struct simdisk *dev = PDE(file_inode(file))->data;
|
|
|
+ char *s = dev->filename;
|
|
|
+ if (s) {
|
|
|
+ ssize_t n = simple_read_from_buffer(buf, size, ppos,
|
|
|
+ s, strlen(s));
|
|
|
+ if (n < 0)
|
|
|
+ return n;
|
|
|
+ buf += n;
|
|
|
+ size -= n;
|
|
|
+ }
|
|
|
+ return simple_read_from_buffer(buf, size, ppos, "\n", 1);
|
|
|
}
|
|
|
|
|
|
-static int proc_write_simdisk(struct file *file, const char *buffer,
|
|
|
- unsigned long count, void *data)
|
|
|
+static ssize_t proc_write_simdisk(struct file *file, const char __user *buf,
|
|
|
+ size_t size, loff_t *ppos)
|
|
|
{
|
|
|
char *tmp = kmalloc(count + 1, GFP_KERNEL);
|
|
|
- struct simdisk *dev = (struct simdisk *) data;
|
|
|
+ struct simdisk *dev = PDE(file_inode(file))->data;
|
|
|
int err;
|
|
|
|
|
|
if (tmp == NULL)
|
|
@@ -256,6 +263,12 @@ out_free:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+static const struct file_operations fops = {
|
|
|
+ .read = proc_read_simdisk,
|
|
|
+ .write = proc_write_simdisk,
|
|
|
+ .llseek = default_llseek,
|
|
|
+};
|
|
|
+
|
|
|
static int __init simdisk_setup(struct simdisk *dev, int which,
|
|
|
struct proc_dir_entry *procdir)
|
|
|
{
|
|
@@ -289,10 +302,7 @@ static int __init simdisk_setup(struct simdisk *dev, int which,
|
|
|
set_capacity(dev->gd, 0);
|
|
|
add_disk(dev->gd);
|
|
|
|
|
|
- dev->procfile = create_proc_entry(tmp, 0644, procdir);
|
|
|
- dev->procfile->data = dev;
|
|
|
- dev->procfile->read_proc = proc_read_simdisk;
|
|
|
- dev->procfile->write_proc = proc_write_simdisk;
|
|
|
+ dev->procfile = proc_create_data(tmp, 0644, procdir, &fops, dev);
|
|
|
return 0;
|
|
|
|
|
|
out_alloc_disk:
|