• Mike Christie's avatar
    scsi: sd: Have midlayer retry sd_spinup_disk() errors · c1acf38c
    Mike Christie authored
    This simplifies sd_spinup_disk() so the SCSI midlayer retries errors for
    it. Note that we retried every UA except Medium Not Present and also if
    scsi_status_is_good() returned failed which would happen for all check
    conditions. In this patch we use SCMD_FAILURE_STAT_ANY which will trigger
    for the same conditions as when scsi_status_is_good() returns false and
    there is status. This will cover all CCs including UAs so there is no
    explicit failures array entry for UAs except for Medium Not Present which
    we don't want to retry.
    
    There is one behavior change where we no longer retry when
    scsi_execute_cmd() returns < 0, but we should be ok. We don't need to retry
    for failures like the queue being removed, and for the case where there are
    no tags/reqs the block layer waits/retries for us. For possible memory
    allocation failures from blk_rq_map_kern() we use GFP_NOIO, so retrying
    will probably not help.
    
    We do not handle the outside loop's retries because we want to sleep
    between tries and we don't support that yet.
    Signed-off-by: default avatarMike Christie <michael.christie@oracle.com>
    Link: https://lore.kernel.org/r/20240123002220.129141-6-michael.christie@oracle.comAcked-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    c1acf38c
sd.c 107 KB