diff options
author | Christoph Hellwig <hch@lst.de> | 2006-03-24 06:15:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-24 10:33:17 -0500 |
commit | 1107ccfbdef280fedc677af3bdbc405611ba554a (patch) | |
tree | a3588525dbe853d13e5f25fa496deecaa022ab3a /drivers/s390/block/dasd_ioctl.c | |
parent | 13c6204facb01d425320411c17febff666875518 (diff) |
[PATCH] s390: use normal switch statement for ioctls in dasd_ioctlc
Add an ->ioctl method to the dasd_discipline structure. This allows to apply
the same kind of cleanups the last patch applied to dasd_ioctl.c to
dasd_eckd.c (the only dasd discipline with special ioctls) aswell.
Again lots of code removed. During auditing the ioctls I found two fishy
return value propagations from copy_{from,to}_user, maintainers please check
those, I've marked them with XXX comments.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/s390/block/dasd_ioctl.c')
-rw-r--r-- | drivers/s390/block/dasd_ioctl.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c index e3ad34686444..bb6caf46bbd9 100644 --- a/drivers/s390/block/dasd_ioctl.c +++ b/drivers/s390/block/dasd_ioctl.c | |||
@@ -448,7 +448,14 @@ dasd_ioctl(struct inode *inode, struct file *file, | |||
448 | case DASDAPIVER: | 448 | case DASDAPIVER: |
449 | return dasd_ioctl_api_version(argp); | 449 | return dasd_ioctl_api_version(argp); |
450 | default: | 450 | default: |
451 | /* resort to the deprecated dynamic ioctl list */ | 451 | /* if the discipline has an ioctl method try it. */ |
452 | if (device->discipline->ioctl) { | ||
453 | int rval = device->discipline->ioctl(device, cmd, argp); | ||
454 | if (rval != -ENOIOCTLCMD) | ||
455 | return rval; | ||
456 | } | ||
457 | |||
458 | /* else resort to the deprecated dynamic ioctl list */ | ||
452 | list_for_each_entry(ioctl, &dasd_ioctl_list, list) { | 459 | list_for_each_entry(ioctl, &dasd_ioctl_list, list) { |
453 | if (ioctl->no == cmd) { | 460 | if (ioctl->no == cmd) { |
454 | /* Found a matching ioctl. Call it. */ | 461 | /* Found a matching ioctl. Call it. */ |