Browse Source

ide: filter out invalid DMA xfer mode changes in HDIO_DRIVE_CMD ioctl handler

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Bartlomiej Zolnierkiewicz 16 years ago
parent
commit
a9c4150907
1 changed files with 4 additions and 9 deletions
  1. 4 9
      drivers/ide/ide-ioctls.c

+ 4 - 9
drivers/ide/ide-ioctls.c

@@ -118,7 +118,6 @@ static int ide_cmd_ioctl(ide_drive_t *drive, unsigned long arg)
 	u8 args[4], xfer_rate = 0;
 	u8 args[4], xfer_rate = 0;
 	struct ide_cmd cmd;
 	struct ide_cmd cmd;
 	struct ide_taskfile *tf = &cmd.tf;
 	struct ide_taskfile *tf = &cmd.tf;
-	u16 *id = drive->id;
 
 
 	if (NULL == (void *) arg) {
 	if (NULL == (void *) arg) {
 		struct request *rq;
 		struct request *rq;
@@ -161,14 +160,10 @@ static int ide_cmd_ioctl(ide_drive_t *drive, unsigned long arg)
 
 
 	if (tf->command == ATA_CMD_SET_FEATURES &&
 	if (tf->command == ATA_CMD_SET_FEATURES &&
 	    tf->feature == SETFEATURES_XFER &&
 	    tf->feature == SETFEATURES_XFER &&
-	    tf->nsect >= XFER_SW_DMA_0 &&
-	    (id[ATA_ID_UDMA_MODES] ||
-	     id[ATA_ID_MWDMA_MODES] ||
-	     id[ATA_ID_SWDMA_MODES])) {
-		xfer_rate = args[1];
-		if (tf->nsect > XFER_UDMA_2 && !eighty_ninty_three(drive)) {
-			printk(KERN_WARNING "%s: UDMA speeds >UDMA33 cannot "
-					    "be set\n", drive->name);
+	    tf->nsect >= XFER_SW_DMA_0) {
+		xfer_rate = ide_find_dma_mode(drive, XFER_UDMA_6);
+		if (xfer_rate != tf->nsect) {
+			err = -EINVAL;
 			goto abort;
 			goto abort;
 		}
 		}
 	}
 	}