• Niklas Cassel's avatar
    scsi: core: Allow libata to complete successful commands via EH · 3d848ca1
    Niklas Cassel authored
    In SCSI, we get the sense data as part of the completion, for ATA however,
    we need to fetch the sense data as an extra step. For an aborted ATA
    command the sense data is fetched via libata's ->eh_strategy_handler().
    
    For Command Duration Limits policy 0xD:
    
      The device shall complete the command without error with the additional
      sense code set to DATA CURRENTLY UNAVAILABLE.
    
    In order to handle this policy in libata, we intend to send a successful
    command via SCSI EH, and let libata's ->eh_strategy_handler() fetch the
    sense data for the good command. This is similar to how we handle an
    aborted ATA command, just that we need to read the Successful NCQ Commands
    log instead of the NCQ Command Error log.
    
    When we get a SATA completion with successful commands, ATA_SENSE will be
    set, indicating that some commands in the completion have sense data.
    
    The sense_valid bitmask in the Sense Data for Successful NCQ Commands log
    will inform exactly which commands that had sense data, which might be a
    subset of all the commands that was completed in the same completion. (Yet
    all will have ATA_SENSE set, since the status is per completion.)
    
    The successful commands that have e.g. a "DATA CURRENTLY UNAVAILABLE" sense
    data will have a SCSI ML byte set, so scsi_eh_flush_done_q() will not set
    the scmd->result to DID_TIME_OUT for these commands. However, the
    successful commands that did not have sense data, must not get their result
    marked as DID_TIME_OUT by SCSI EH.
    
    Add a new flag SCMD_FORCE_EH_SUCCESS, which tells SCSI EH to not mark a
    command as DID_TIME_OUT, even if it has scmd->result == SAM_STAT_GOOD.
    
    This will be used by libata in a subsequent commit.
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
    Signed-off-by: default avatarNiklas Cassel <niklas.cassel@wdc.com>
    Link: https://lore.kernel.org/r/20230511011356.227789-5-nks@flawful.orgSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    3d848ca1
scsi_error.c 70 KB