|
@@ -270,8 +270,11 @@ DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR,
|
|
ata_scsi_park_show, ata_scsi_park_store);
|
|
ata_scsi_park_show, ata_scsi_park_store);
|
|
EXPORT_SYMBOL_GPL(dev_attr_unload_heads);
|
|
EXPORT_SYMBOL_GPL(dev_attr_unload_heads);
|
|
|
|
|
|
-static void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
|
|
|
|
|
|
+void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
|
|
{
|
|
{
|
|
|
|
+ if (!cmd)
|
|
|
|
+ return;
|
|
|
|
+
|
|
cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
|
|
cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
|
|
|
|
|
|
scsi_build_sense_buffer(0, cmd->sense_buffer, sk, asc, ascq);
|
|
scsi_build_sense_buffer(0, cmd->sense_buffer, sk, asc, ascq);
|
|
@@ -1784,6 +1787,8 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
|
|
if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
|
|
if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
|
|
((cdb[2] & 0x20) || need_sense))
|
|
((cdb[2] & 0x20) || need_sense))
|
|
ata_gen_passthru_sense(qc);
|
|
ata_gen_passthru_sense(qc);
|
|
|
|
+ else if (qc->flags & ATA_QCFLAG_SENSE_VALID)
|
|
|
|
+ cmd->result = SAM_STAT_CHECK_CONDITION;
|
|
else if (need_sense)
|
|
else if (need_sense)
|
|
ata_gen_ata_sense(qc);
|
|
ata_gen_ata_sense(qc);
|
|
else
|
|
else
|