diff options
| -rw-r--r-- | drivers/scsi/libata-scsi.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index 3b4ca55a3332..379e87089764 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
| @@ -2239,7 +2239,7 @@ ata_scsi_pass_thru(struct ata_queued_cmd *qc, const u8 *scsicmd) | |||
| 2239 | struct scsi_cmnd *cmd = qc->scsicmd; | 2239 | struct scsi_cmnd *cmd = qc->scsicmd; |
| 2240 | 2240 | ||
| 2241 | if ((tf->protocol = ata_scsi_map_proto(scsicmd[1])) == ATA_PROT_UNKNOWN) | 2241 | if ((tf->protocol = ata_scsi_map_proto(scsicmd[1])) == ATA_PROT_UNKNOWN) |
| 2242 | return 1; | 2242 | goto invalid_fld; |
| 2243 | 2243 | ||
| 2244 | /* | 2244 | /* |
| 2245 | * 12 and 16 byte CDBs use different offsets to | 2245 | * 12 and 16 byte CDBs use different offsets to |
| @@ -2301,7 +2301,7 @@ ata_scsi_pass_thru(struct ata_queued_cmd *qc, const u8 *scsicmd) | |||
| 2301 | */ | 2301 | */ |
| 2302 | if ((tf->command == ATA_CMD_SET_FEATURES) | 2302 | if ((tf->command == ATA_CMD_SET_FEATURES) |
| 2303 | && (tf->feature == SETFEATURES_XFER)) | 2303 | && (tf->feature == SETFEATURES_XFER)) |
| 2304 | return 1; | 2304 | goto invalid_fld; |
| 2305 | 2305 | ||
| 2306 | /* | 2306 | /* |
| 2307 | * Set flags so that all registers will be written, | 2307 | * Set flags so that all registers will be written, |
| @@ -2322,6 +2322,11 @@ ata_scsi_pass_thru(struct ata_queued_cmd *qc, const u8 *scsicmd) | |||
| 2322 | qc->nsect = cmd->bufflen / ATA_SECT_SIZE; | 2322 | qc->nsect = cmd->bufflen / ATA_SECT_SIZE; |
| 2323 | 2323 | ||
| 2324 | return 0; | 2324 | return 0; |
| 2325 | |||
| 2326 | invalid_fld: | ||
| 2327 | ata_scsi_set_sense(qc->scsicmd, ILLEGAL_REQUEST, 0x24, 0x00); | ||
| 2328 | /* "Invalid field in cdb" */ | ||
| 2329 | return 1; | ||
| 2325 | } | 2330 | } |
| 2326 | 2331 | ||
| 2327 | /** | 2332 | /** |
