• Dan Williams's avatar
    [SCSI] isci: fix needless ata reset escalations · 2193b1b1
    Dan Williams authored
    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: default avatarXun Ni <xun.ni@intel.com>
    Tested-by: default avatarNelson Cheng <nelson.cheng@intel.com>
    Acked-by: default avatarLukasz Dorau <lukasz.dorau@intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
    2193b1b1
request.c 102 KB