aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-07-19 19:11:59 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2007-07-19 19:11:59 -0400
commit89636af25d75d8672aea05d258be357d0dc4bd70 (patch)
treedc1960bb144f76c75e82928ed3d601b52a275999
parent4bf9fdf7f21f118e2c5052ec8e46faf00eb5a4ea (diff)
ide: add support for SCSI ioctls to ide-floppy
Now that ide-floppy supports SG_IO we can add support for SCSI ioctls (except deprecated SCSI_IOCTL_SEND_COMMAND and legacy CDROM_SEND_PACKET ones - we can add them later iff really needed). While at it remove handling of CDROMEJECT and CDROMCLOSETRAY ioctls from generic_ide_ioctl(): - This prevents ide-{disk,tape,scsi} device drivers from obtaining REQ_TYPE_BLOCK_PC type requests which are currently unsupported by these drivers and which are potentially harmful (as reported by Andrew). - There is no functionality loss since aforementioned ioctls will now be handled by idefloppy_ioctl()->scsi_cmd_ioctl() (for devices using ide-floppy driver) and by idecd_ioctl->cdrom_ioctl()->scsi_cmd_ioctl() (for devices using ide-cd driver). Cc: Jens Axboe <jens.axboe@oracle.com> Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Cc: James Bottomley <James.Bottomley@steeleye.com> Cc: Jeff Garzik <jeff@garzik.org> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/ide-floppy.c18
-rw-r--r--drivers/ide/ide.c4
2 files changed, 17 insertions, 5 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index a21f585b1caa..ae8e1a64b8ad 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -99,6 +99,8 @@
99#include <linux/bitops.h> 99#include <linux/bitops.h>
100#include <linux/mutex.h> 100#include <linux/mutex.h>
101 101
102#include <scsi/scsi_ioctl.h>
103
102#include <asm/byteorder.h> 104#include <asm/byteorder.h>
103#include <asm/irq.h> 105#include <asm/irq.h>
104#include <asm/uaccess.h> 106#include <asm/uaccess.h>
@@ -2099,7 +2101,21 @@ static int idefloppy_ioctl(struct inode *inode, struct file *file,
2099 case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS: 2101 case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS:
2100 return idefloppy_get_format_progress(drive, argp); 2102 return idefloppy_get_format_progress(drive, argp);
2101 } 2103 }
2102 return generic_ide_ioctl(drive, file, bdev, cmd, arg); 2104
2105 /*
2106 * skip SCSI_IOCTL_SEND_COMMAND (deprecated)
2107 * and CDROM_SEND_PACKET (legacy) ioctls
2108 */
2109 if (cmd != CDROM_SEND_PACKET && cmd != SCSI_IOCTL_SEND_COMMAND)
2110 err = scsi_cmd_ioctl(file, bdev->bd_disk->queue,
2111 bdev->bd_disk, cmd, argp);
2112 else
2113 err = -ENOTTY;
2114
2115 if (err == -ENOTTY)
2116 err = generic_ide_ioctl(drive, file, bdev, cmd, arg);
2117
2118 return err;
2103} 2119}
2104 2120
2105static int idefloppy_media_changed(struct gendisk *disk) 2121static int idefloppy_media_changed(struct gendisk *disk)
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index c438cc314238..5e88a060df06 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -1097,10 +1097,6 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
1097 return 0; 1097 return 0;
1098 } 1098 }
1099 1099
1100 case CDROMEJECT:
1101 case CDROMCLOSETRAY:
1102 return scsi_cmd_ioctl(file, bdev->bd_disk->queue, bdev->bd_disk, cmd, p);
1103
1104 case HDIO_GET_BUSSTATE: 1100 case HDIO_GET_BUSSTATE:
1105 if (!capable(CAP_SYS_ADMIN)) 1101 if (!capable(CAP_SYS_ADMIN))
1106 return -EACCES; 1102 return -EACCES;