• Damien Le Moal's avatar
    scsi: sd: Do not issue commands to suspended disks on shutdown · 99398d20
    Damien Le Moal authored
    If an error occurs when resuming a host adapter before the devices
    attached to the adapter are resumed, the adapter low level driver may
    remove the scsi host, resulting in a call to sd_remove() for the
    disks of the host. This in turn results in a call to sd_shutdown() which
    will issue a synchronize cache command and a start stop unit command to
    spindown the disk. sd_shutdown() issues the commands only if the device
    is not already runtime suspended but does not check the power state for
    system-wide suspend/resume. That is, the commands may be issued with the
    device in a suspended state, which causes PM resume to hang, forcing a
    reset of the machine to recover.
    
    Fix this by tracking the suspended state of a disk by introducing the
    suspended boolean field in the scsi_disk structure. This flag is set to
    true when the disk is suspended is sd_suspend_common() and resumed with
    sd_resume(). When suspended is true, sd_shutdown() is not executed from
    sd_remove().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    99398d20
sd.c 105 KB