diff options
| author | Christoph Hellwig <hch@lst.de> | 2006-01-09 23:52:07 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-10 11:01:31 -0500 |
| commit | f042e0f80b0a9f5bb57c36d60a2798de6ca943b2 (patch) | |
| tree | 57d8835c4683ec3456ebd73d3c65df0ec5725a74 | |
| parent | 51a990588a3e38f7963964813786fa4f0da43ecc (diff) | |
[PATCH] ->compat_ioctl for 390 tape_char
The only own ioctl, TAPE390_DISPLAY, is compat_clean, everything else is
routed through common translation code.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | arch/s390/kernel/compat_ioctl.c | 2 | ||||
| -rw-r--r-- | drivers/s390/char/tape_char.c | 20 |
2 files changed, 20 insertions, 2 deletions
diff --git a/arch/s390/kernel/compat_ioctl.c b/arch/s390/kernel/compat_ioctl.c index da473bda962f..432aeb38b50d 100644 --- a/arch/s390/kernel/compat_ioctl.c +++ b/arch/s390/kernel/compat_ioctl.c | |||
| @@ -63,8 +63,6 @@ COMPATIBLE_IOCTL(BIODASDSATTR) | |||
| 63 | COMPATIBLE_IOCTL(BIODASDCMFENABLE) | 63 | COMPATIBLE_IOCTL(BIODASDCMFENABLE) |
| 64 | COMPATIBLE_IOCTL(BIODASDCMFDISABLE) | 64 | COMPATIBLE_IOCTL(BIODASDCMFDISABLE) |
| 65 | COMPATIBLE_IOCTL(BIODASDREADALLCMB) | 65 | COMPATIBLE_IOCTL(BIODASDREADALLCMB) |
| 66 | |||
| 67 | COMPATIBLE_IOCTL(TAPE390_DISPLAY) | ||
| 68 | }; | 66 | }; |
| 69 | 67 | ||
| 70 | int ioctl_table_size = ARRAY_SIZE(ioctl_start); | 68 | int ioctl_table_size = ARRAY_SIZE(ioctl_start); |
diff --git a/drivers/s390/char/tape_char.c b/drivers/s390/char/tape_char.c index 86262a13f7c6..5ce7ca38ace0 100644 --- a/drivers/s390/char/tape_char.c +++ b/drivers/s390/char/tape_char.c | |||
| @@ -37,6 +37,8 @@ static int tapechar_open(struct inode *,struct file *); | |||
| 37 | static int tapechar_release(struct inode *,struct file *); | 37 | static int tapechar_release(struct inode *,struct file *); |
| 38 | static int tapechar_ioctl(struct inode *, struct file *, unsigned int, | 38 | static int tapechar_ioctl(struct inode *, struct file *, unsigned int, |
| 39 | unsigned long); | 39 | unsigned long); |
| 40 | static long tapechar_compat_ioctl(struct file *, unsigned int, | ||
| 41 | unsigned long); | ||
| 40 | 42 | ||
| 41 | static struct file_operations tape_fops = | 43 | static struct file_operations tape_fops = |
| 42 | { | 44 | { |
| @@ -44,6 +46,7 @@ static struct file_operations tape_fops = | |||
| 44 | .read = tapechar_read, | 46 | .read = tapechar_read, |
| 45 | .write = tapechar_write, | 47 | .write = tapechar_write, |
| 46 | .ioctl = tapechar_ioctl, | 48 | .ioctl = tapechar_ioctl, |
| 49 | .compat_ioctl = tapechar_compat_ioctl, | ||
| 47 | .open = tapechar_open, | 50 | .open = tapechar_open, |
| 48 | .release = tapechar_release, | 51 | .release = tapechar_release, |
| 49 | }; | 52 | }; |
| @@ -463,6 +466,23 @@ tapechar_ioctl(struct inode *inp, struct file *filp, | |||
| 463 | return device->discipline->ioctl_fn(device, no, data); | 466 | return device->discipline->ioctl_fn(device, no, data); |
| 464 | } | 467 | } |
| 465 | 468 | ||
| 469 | static long | ||
| 470 | tapechar_compat_ioctl(struct file *filp, unsigned int no, unsigned long data) | ||
| 471 | { | ||
| 472 | struct tape_device *device = filp->private_data; | ||
| 473 | int rval = -ENOIOCTLCMD; | ||
| 474 | |||
| 475 | if (device->discipline->ioctl_fn) { | ||
| 476 | lock_kernel(); | ||
| 477 | rval = device->discipline->ioctl_fn(device, no, data); | ||
| 478 | unlock_kernel(); | ||
| 479 | if (rval == -EINVAL) | ||
| 480 | rval = -ENOIOCTLCMD; | ||
| 481 | } | ||
| 482 | |||
| 483 | return rval; | ||
| 484 | } | ||
| 485 | |||
| 466 | /* | 486 | /* |
| 467 | * Initialize character device frontend. | 487 | * Initialize character device frontend. |
| 468 | */ | 488 | */ |
