aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libsas
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/libsas')
-rw-r--r--drivers/scsi/libsas/sas_ata.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index e1a395b438ee..4a6e203861d2 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -71,13 +71,13 @@ static enum ata_completion_errors sas_to_ata_err(struct task_status_struct *ts)
71 case SAS_SG_ERR: 71 case SAS_SG_ERR:
72 return AC_ERR_INVALID; 72 return AC_ERR_INVALID;
73 73
74 case SAM_STAT_CHECK_CONDITION:
75 case SAS_OPEN_TO: 74 case SAS_OPEN_TO:
76 case SAS_OPEN_REJECT: 75 case SAS_OPEN_REJECT:
77 SAS_DPRINTK("%s: Saw error %d. What to do?\n", 76 SAS_DPRINTK("%s: Saw error %d. What to do?\n",
78 __func__, ts->stat); 77 __func__, ts->stat);
79 return AC_ERR_OTHER; 78 return AC_ERR_OTHER;
80 79
80 case SAM_STAT_CHECK_CONDITION:
81 case SAS_ABORTED_TASK: 81 case SAS_ABORTED_TASK:
82 return AC_ERR_DEV; 82 return AC_ERR_DEV;
83 83
@@ -107,13 +107,15 @@ static void sas_ata_task_done(struct sas_task *task)
107 sas_ha = dev->port->ha; 107 sas_ha = dev->port->ha;
108 108
109 spin_lock_irqsave(dev->sata_dev.ap->lock, flags); 109 spin_lock_irqsave(dev->sata_dev.ap->lock, flags);
110 if (stat->stat == SAS_PROTO_RESPONSE || stat->stat == SAM_STAT_GOOD) { 110 if (stat->stat == SAS_PROTO_RESPONSE || stat->stat == SAM_STAT_GOOD ||
111 ((stat->stat == SAM_STAT_CHECK_CONDITION &&
112 dev->sata_dev.command_set == ATAPI_COMMAND_SET))) {
111 ata_tf_from_fis(resp->ending_fis, &dev->sata_dev.tf); 113 ata_tf_from_fis(resp->ending_fis, &dev->sata_dev.tf);
112 qc->err_mask |= ac_err_mask(dev->sata_dev.tf.command); 114 qc->err_mask |= ac_err_mask(dev->sata_dev.tf.command);
113 dev->sata_dev.sstatus = resp->sstatus; 115 dev->sata_dev.sstatus = resp->sstatus;
114 dev->sata_dev.serror = resp->serror; 116 dev->sata_dev.serror = resp->serror;
115 dev->sata_dev.scontrol = resp->scontrol; 117 dev->sata_dev.scontrol = resp->scontrol;
116 } else if (stat->stat != SAM_STAT_GOOD) { 118 } else {
117 ac = sas_to_ata_err(stat); 119 ac = sas_to_ata_err(stat);
118 if (ac) { 120 if (ac) {
119 SAS_DPRINTK("%s: SAS error %x\n", __func__, 121 SAS_DPRINTK("%s: SAS error %x\n", __func__,