linux-stable/drivers/scsi/isci
Dan Williams 2193b1b16c [SCSI] isci: fix needless ata reset escalations
isci is needlessly tying libata's hands by returning
SAM_STAT_CHECK_CONDITION to some ata errors.  Instead, prefer
SAS_PROTO_RESPONSE to let libata (via sas_ata_task_done()) disposition
the device-to-host fis.

For example isci is triggering an HSM Violation where AHCI is showing a
simple media error for the same bus condition:

isci:
ata7.00: failed command: READ VERIFY SECTOR(S)
ata7.00: cmd 40/00:01:00:00:00/00:00:00:00:00/e0 tag 0
         res 01/04:00:00:00:00/00:00:00:00:00/e0 Emask 0x3 (HSM violation)

ahci:
ata6.00: failed command: READ VERIFY SECTOR(S)
ata6.00: cmd 40/00:01:00:00:00/00:00:00:00:00/e0 tag 0
         res 51/40:01:00:00:00/00:00:00:00:00/e0 Emask 0x9 (media error)

Note that the isci response matches this from sas_ata_task_done():
	/* We saw a SAS error. Send a vague error. */
	[..]
	dev->sata_dev.fis[3] = 0x04; /* status err */
	dev->sata_dev.fis[2] = ATA_ERR;

The end effect is that isci is needlessly triggering hard resets when
they are not necessary.

Reported-by: Xun Ni <xun.ni@intel.com>
Tested-by: Nelson Cheng <nelson.cheng@intel.com>
Acked-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
2014-03-15 10:18:53 -07:00
..
host.c SCSI for-linus on 20121002 2012-10-02 19:01:32 -07:00
host.h [SCSI] isci: correct erroneous for_each_isci_host macro 2014-03-10 12:49:39 +04:00
init.c [SCSI] isci: add CONFIG_PM_SLEEP to suspend/resume functions 2013-04-11 16:01:53 -07:00
isci.h [SCSI] isci: oem parameter format v1.3 (cable select) 2012-01-16 11:43:04 +04:00
Makefile
phy.c isci: add a couple __iomem annotations 2012-07-03 12:09:32 -07:00
phy.h isci: kill sci_phy_protocol and sci_request_protocol 2012-05-17 12:27:11 -07:00
port.c scsi: fix various printk and comment typos 2012-09-01 08:24:35 -07:00
port.h isci: Manage the link layer hang detect timer for RNC suspensions. 2012-05-17 14:33:36 -07:00
port_config.c [SCSI] isci: fix reset timeout handling 2014-03-10 12:48:16 +04:00
probe_roms.c isci: fix isci_pci_probe() generates warning on efi failure path 2012-07-03 12:09:30 -07:00
probe_roms.h isci: refactor initialization for S3/S4 2012-05-17 12:27:12 -07:00
registers.h isci: Changes in COMSAS timings enabling ISCI to detect buggy disc drives. 2012-05-17 12:27:28 -07:00
remote_device.c [SCSI] sas: unify the pointlessly separated enums sas_dev_type and sas_device_type 2013-05-10 07:47:52 -07:00
remote_device.h [SCSI] sas: unify the pointlessly separated enums sas_dev_type and sas_device_type 2013-05-10 07:47:52 -07:00
remote_node_context.c isci: End the RNC resumption wait when the RNC is destroyed. 2012-05-17 14:33:44 -07:00
remote_node_context.h isci: make function declaration match implementation 2012-07-03 12:09:31 -07:00
remote_node_table.c
remote_node_table.h
request.c [SCSI] isci: fix needless ata reset escalations 2014-03-15 10:18:53 -07:00
request.h isci: Remove obviated host callback list. 2012-05-17 14:33:44 -07:00
sas.h
scu_completion_codes.h isci: Handle all suspending TC completions 2012-05-17 14:33:37 -07:00
scu_event_codes.h
scu_remote_node_context.h
scu_task_context.h [SCSI] isci: T10 DIF support 2012-02-19 09:14:24 -06:00
task.c [SCSI] isci: fix reset timeout handling 2014-03-10 12:48:16 +04:00
task.h isci: Redesign device suspension, abort, cleanup. 2012-05-17 14:33:38 -07:00
unsolicited_frame_control.c isci: refactor initialization for S3/S4 2012-05-17 12:27:12 -07:00
unsolicited_frame_control.h isci: refactor initialization for S3/S4 2012-05-17 12:27:12 -07:00