• Damien Le Moal's avatar
    ata: libata-scsi: link ata port and scsi device · fb99ef17
    Damien Le Moal authored
    There is no direct device ancestry defined between an ata_device and
    its scsi device which prevents the power management code from correctly
    ordering suspend and resume operations. Create such ancestry with the
    ata device as the parent to ensure that the scsi device (child) is
    suspended before the ata device and that resume handles the ata device
    before the scsi device.
    
    The parent-child (supplier-consumer) relationship is established between
    the ata_port (parent) and the scsi device (child) with the function
    device_add_link(). The parent used is not the ata_device as the PM
    operations are defined per port and the status of all devices connected
    through that port is controlled from the port operations.
    
    The device link is established with the new function
    ata_scsi_slave_alloc(), and this function is used to define the
    ->slave_alloc callback of the scsi host template of all ata drivers.
    
    Fixes: a19a93e4
    
     ("scsi: core: pm: Rely on the device driver core for async power management")
    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 avatarNiklas Cassel <niklas.cassel@wdc.com>
    Tested-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: default avatarJohn Garry <john.g.garry@oracle.com>
    fb99ef17
libata-scsi.c 119 KB