diff options
Diffstat (limited to 'arch/um/drivers/ubd_kern.c')
| -rw-r--r-- | arch/um/drivers/ubd_kern.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 635d16d90a80..5ff554677f40 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include "linux/init.h" | 27 | #include "linux/init.h" |
| 28 | #include "linux/cdrom.h" | 28 | #include "linux/cdrom.h" |
| 29 | #include "linux/proc_fs.h" | 29 | #include "linux/proc_fs.h" |
| 30 | #include "linux/seq_file.h" | ||
| 30 | #include "linux/ctype.h" | 31 | #include "linux/ctype.h" |
| 31 | #include "linux/capability.h" | 32 | #include "linux/capability.h" |
| 32 | #include "linux/mm.h" | 33 | #include "linux/mm.h" |
| @@ -200,23 +201,25 @@ static void make_proc_ide(void) | |||
| 200 | proc_ide = proc_mkdir("ide0", proc_ide_root); | 201 | proc_ide = proc_mkdir("ide0", proc_ide_root); |
| 201 | } | 202 | } |
| 202 | 203 | ||
| 203 | static int proc_ide_read_media(char *page, char **start, off_t off, int count, | 204 | static int fake_ide_media_proc_show(struct seq_file *m, void *v) |
| 204 | int *eof, void *data) | ||
| 205 | { | 205 | { |
| 206 | int len; | 206 | seq_puts(m, "disk\n"); |
| 207 | 207 | return 0; | |
| 208 | strcpy(page, "disk\n"); | 208 | } |
| 209 | len = strlen("disk\n"); | 209 | |
| 210 | len -= off; | 210 | static int fake_ide_media_proc_open(struct inode *inode, struct file *file) |
| 211 | if (len < count){ | 211 | { |
| 212 | *eof = 1; | 212 | return single_open(file, fake_ide_media_proc_show, NULL); |
| 213 | if (len <= 0) return 0; | ||
| 214 | } | ||
| 215 | else len = count; | ||
| 216 | *start = page + off; | ||
| 217 | return len; | ||
| 218 | } | 213 | } |
| 219 | 214 | ||
| 215 | static const struct file_operations fake_ide_media_proc_fops = { | ||
| 216 | .owner = THIS_MODULE, | ||
| 217 | .open = fake_ide_media_proc_open, | ||
| 218 | .read = seq_read, | ||
| 219 | .llseek = seq_lseek, | ||
| 220 | .release = single_release, | ||
| 221 | }; | ||
| 222 | |||
| 220 | static void make_ide_entries(const char *dev_name) | 223 | static void make_ide_entries(const char *dev_name) |
| 221 | { | 224 | { |
| 222 | struct proc_dir_entry *dir, *ent; | 225 | struct proc_dir_entry *dir, *ent; |
| @@ -227,11 +230,8 @@ static void make_ide_entries(const char *dev_name) | |||
| 227 | dir = proc_mkdir(dev_name, proc_ide); | 230 | dir = proc_mkdir(dev_name, proc_ide); |
| 228 | if(!dir) return; | 231 | if(!dir) return; |
| 229 | 232 | ||
| 230 | ent = create_proc_entry("media", S_IFREG|S_IRUGO, dir); | 233 | ent = proc_create("media", S_IRUGO, dir, &fake_ide_media_proc_fops); |
| 231 | if(!ent) return; | 234 | if(!ent) return; |
| 232 | ent->data = NULL; | ||
| 233 | ent->read_proc = proc_ide_read_media; | ||
| 234 | ent->write_proc = NULL; | ||
| 235 | snprintf(name, sizeof(name), "ide0/%s", dev_name); | 235 | snprintf(name, sizeof(name), "ide0/%s", dev_name); |
| 236 | proc_symlink(dev_name, proc_ide_root, name); | 236 | proc_symlink(dev_name, proc_ide_root, name); |
| 237 | } | 237 | } |
