mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
[SCSI] libsas: fix taskfile corruption in sas_ata_qc_fill_rtf
fill_result_tf() grabs the taskfile flags from the originating qc which sas_ata_qc_fill_rtf() promptly overwrites. The presence of an ata_taskfile in the sata_device makes it tempting to just copy the full contents in sas_ata_qc_fill_rtf(). However, libata really only wants the fis contents and expects the other portions of the taskfile to not be touched by ->qc_fill_rtf. To that end store a fis buffer in the sata_device and use ata_tf_from_fis() like every other ->qc_fill_rtf() implementation. Cc: <stable@vger.kernel.org> Reported-by: Praveen Murali <pmurali@logicube.com> Tested-by: Praveen Murali <pmurali@logicube.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
222a806af8
commit
6ef1b512f4
3 changed files with 11 additions and 9 deletions
|
@ -163,6 +163,8 @@ enum ata_command_set {
|
|||
ATAPI_COMMAND_SET = 1,
|
||||
};
|
||||
|
||||
#define ATA_RESP_FIS_SIZE 24
|
||||
|
||||
struct sata_device {
|
||||
enum ata_command_set command_set;
|
||||
struct smp_resp rps_resp; /* report_phy_sata_resp */
|
||||
|
@ -171,7 +173,7 @@ struct sata_device {
|
|||
|
||||
struct ata_port *ap;
|
||||
struct ata_host ata_host;
|
||||
struct ata_taskfile tf;
|
||||
u8 fis[ATA_RESP_FIS_SIZE];
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -537,7 +539,7 @@ enum exec_status {
|
|||
*/
|
||||
struct ata_task_resp {
|
||||
u16 frame_len;
|
||||
u8 ending_fis[24]; /* dev to host or data-in */
|
||||
u8 ending_fis[ATA_RESP_FIS_SIZE]; /* dev to host or data-in */
|
||||
};
|
||||
|
||||
#define SAS_STATUS_BUF_SIZE 96
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue