git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
scsi: libsas: fix ata xfer length
[pandora-kernel.git]
/
drivers
/
scsi
/
libsas
/
sas_ata.c
diff --git
a/drivers/scsi/libsas/sas_ata.c
b/drivers/scsi/libsas/sas_ata.c
index
db9238f
..
33e0c18
100644
(file)
--- a/
drivers/scsi/libsas/sas_ata.c
+++ b/
drivers/scsi/libsas/sas_ata.c
@@
-112,12
+112,12
@@
static void sas_ata_task_done(struct sas_task *task)
if (stat->stat == SAS_PROTO_RESPONSE || stat->stat == SAM_STAT_GOOD ||
((stat->stat == SAM_STAT_CHECK_CONDITION &&
dev->sata_dev.command_set == ATAPI_COMMAND_SET))) {
if (stat->stat == SAS_PROTO_RESPONSE || stat->stat == SAM_STAT_GOOD ||
((stat->stat == SAM_STAT_CHECK_CONDITION &&
dev->sata_dev.command_set == ATAPI_COMMAND_SET))) {
-
ata_tf_from_fis(resp->ending_fis, &dev->sata_dev.tf
);
+
memcpy(dev->sata_dev.fis, resp->ending_fis, ATA_RESP_FIS_SIZE
);
if (!link->sactive) {
if (!link->sactive) {
- qc->err_mask |= ac_err_mask(dev->sata_dev.
tf.command
);
+ qc->err_mask |= ac_err_mask(dev->sata_dev.
fis[2]
);
} else {
} else {
- link->eh_info.err_mask |= ac_err_mask(dev->sata_dev.
tf.command
);
+ link->eh_info.err_mask |= ac_err_mask(dev->sata_dev.
fis[2]
);
if (unlikely(link->eh_info.err_mask))
qc->flags |= ATA_QCFLAG_FAILED;
}
if (unlikely(link->eh_info.err_mask))
qc->flags |= ATA_QCFLAG_FAILED;
}
@@
-138,8
+138,8
@@
static void sas_ata_task_done(struct sas_task *task)
qc->flags |= ATA_QCFLAG_FAILED;
}
qc->flags |= ATA_QCFLAG_FAILED;
}
- dev->sata_dev.
tf.feature
= 0x04; /* status err */
- dev->sata_dev.
tf.command
= ATA_ERR;
+ dev->sata_dev.
fis[3]
= 0x04; /* status err */
+ dev->sata_dev.
fis[2]
= ATA_ERR;
}
}
}
}
@@
-197,7
+197,7
@@
static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
qc->tf.nsect = 0;
}
qc->tf.nsect = 0;
}
- ata_tf_to_fis(&qc->tf,
1, 0, (u8
*)&task->ata_task.fis);
+ ata_tf_to_fis(&qc->tf,
qc->dev->link->pmp, 1, (u8
*)&task->ata_task.fis);
task->uldd_task = qc;
if (ata_is_atapi(qc->tf.protocol)) {
memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
task->uldd_task = qc;
if (ata_is_atapi(qc->tf.protocol)) {
memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
@@
-205,7
+205,7
@@
static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
task->num_scatter = qc->n_elem;
} else {
for_each_sg(qc->sg, sg, qc->n_elem, si)
task->num_scatter = qc->n_elem;
} else {
for_each_sg(qc->sg, sg, qc->n_elem, si)
- xfer += sg
->length
;
+ xfer += sg
_dma_len(sg)
;
task->total_xfer_len = xfer;
task->num_scatter = si;
task->total_xfer_len = xfer;
task->num_scatter = si;
@@
-252,7
+252,7
@@
static bool sas_ata_qc_fill_rtf(struct ata_queued_cmd *qc)
{
struct domain_device *dev = qc->ap->private_data;
{
struct domain_device *dev = qc->ap->private_data;
-
memcpy(&qc->result_tf, &dev->sata_dev.tf, sizeof(qc->result_tf)
);
+
ata_tf_from_fis(dev->sata_dev.fis, &qc->result_tf
);
return true;
}
return true;
}