lkml.org 
[lkml]   [2019]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 009/205] scsi: mpt3sas: Call sas_remove_host before removing the target devices
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit dc730212e8a378763cb182b889f90c8101331332 ]

    Call sas_remove_host() before removing the target devices in the driver's
    .remove() callback function(i.e. during driver unload time). So that
    driver can provide a way to allow SYNC CACHE, START STOP unit commands
    etc. (which are issued from SML) to the target drives during driver unload
    time.

    Once sas_remove_host() is called before removing the target drives then
    driver can just clean up the resources allocated for target devices and no
    need to call sas_port_delete_phy(), sas_port_delete() API's as these API's
    internally called from sas_remove_host().

    Signed-off-by: Suganath Prabu <suganath-prabu.subramani@broadcom.com>
    Reviewed-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 +-
    drivers/scsi/mpt3sas/mpt3sas_transport.c | 7 +++++--
    2 files changed, 6 insertions(+), 3 deletions(-)

    diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
    index ae5e579ac473..b28efddab7b1 100644
    --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
    +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
    @@ -8260,6 +8260,7 @@ static void scsih_remove(struct pci_dev *pdev)

    /* release all the volumes */
    _scsih_ir_shutdown(ioc);
    + sas_remove_host(shost);
    list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list,
    list) {
    if (raid_device->starget) {
    @@ -8296,7 +8297,6 @@ static void scsih_remove(struct pci_dev *pdev)
    ioc->sas_hba.num_phys = 0;
    }

    - sas_remove_host(shost);
    mpt3sas_base_detach(ioc);
    spin_lock(&gioc_lock);
    list_del(&ioc->list);
    diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
    index 63dd9bc21ff2..66d9f04c4c0b 100644
    --- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
    +++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
    @@ -846,10 +846,13 @@ mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
    mpt3sas_port->remote_identify.sas_address,
    mpt3sas_phy->phy_id);
    mpt3sas_phy->phy_belongs_to_port = 0;
    - sas_port_delete_phy(mpt3sas_port->port, mpt3sas_phy->phy);
    + if (!ioc->remove_host)
    + sas_port_delete_phy(mpt3sas_port->port,
    + mpt3sas_phy->phy);
    list_del(&mpt3sas_phy->port_siblings);
    }
    - sas_port_delete(mpt3sas_port->port);
    + if (!ioc->remove_host)
    + sas_port_delete(mpt3sas_port->port);
    kfree(mpt3sas_port);
    }

    --
    2.19.1


    \
     
     \ /
      Last update: 2019-02-11 15:55    [W:3.008 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site