You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
6.4 KiB
161 lines
6.4 KiB
From 4f9cb26b852566482d4c87b5b8ffa4ee8fcb880b Mon Sep 17 00:00:00 2001
|
|
From: Tomas Henzl <thenzl@redhat.com>
|
|
Date: Fri, 13 Nov 2020 18:42:50 -0500
|
|
Subject: [PATCH 25/33] [scsi] scsi: mpt3sas: Rename
|
|
transport_del_phy_from_an_existing_port()
|
|
|
|
Message-id: <20201113184258.11169-7-thenzl@redhat.com>
|
|
Patchwork-id: 339462
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.4 e-stor PATCH 06/14] scsi: mpt3sas: Rename transport_del_phy_from_an_existing_port()
|
|
Bugzilla: 1888543
|
|
RH-Acked-by: Ewan Milne <emilne@redhat.com>
|
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
|
|
Renamed _transport_add_phy_to_an_existing_port() to
|
|
mpt3sas_transport_add_phy_to_an_existing_port() and
|
|
_transport_del_phy_from_an_existing_port() to
|
|
mpt3sas_transport_del_phy_from_an_existing_port() as the driver needs to
|
|
call these functions from outside mpt3sas_transport.c file.
|
|
|
|
Added extra function argument 'port' of type struct hba_port to above
|
|
functions and check for portID before adding/removing the phy from the
|
|
_sas_port object. I.e. add/remove the phy from _sas_port object only if
|
|
_sas_port's port object and phy's port object are the same.
|
|
|
|
Link: https://lore.kernel.org/r/20201027130847.9962-7-sreekanth.reddy@broadcom.com
|
|
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
|
|
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
(cherry picked from commit c71ccf93c00c0cef062c2371e9a614526fee9adb)
|
|
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
|
|
Signed-off-by: Jan Stancek <jstancek@redhat.com>
|
|
---
|
|
drivers/scsi/mpt3sas/mpt3sas_base.h | 7 +++++++
|
|
drivers/scsi/mpt3sas/mpt3sas_transport.c | 35 +++++++++++++++++++++-----------
|
|
2 files changed, 30 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h
|
|
index b5d1fc5b665b..24db6273e5f5 100644
|
|
--- a/drivers/scsi/mpt3sas/mpt3sas_base.h
|
|
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.h
|
|
@@ -1811,6 +1811,13 @@ void mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc,
|
|
struct hba_port *port);
|
|
extern struct sas_function_template mpt3sas_transport_functions;
|
|
extern struct scsi_transport_template *mpt3sas_transport_template;
|
|
+void
|
|
+mpt3sas_transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
+ struct _sas_node *sas_node, struct _sas_phy *mpt3sas_phy);
|
|
+void
|
|
+mpt3sas_transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
+ struct _sas_node *sas_node, struct _sas_phy *mpt3sas_phy,
|
|
+ u64 sas_address, struct hba_port *port);
|
|
/* trigger data externs */
|
|
void mpt3sas_send_trigger_data_event(struct MPT3SAS_ADAPTER *ioc,
|
|
struct SL_WH_TRIGGERS_EVENT_DATA_T *event_data);
|
|
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
|
|
index 54c004e96170..560ce323646f 100644
|
|
--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
|
|
+++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
|
|
@@ -503,16 +503,17 @@ _transport_add_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_port *mpt3sas_port,
|
|
}
|
|
|
|
/**
|
|
- * _transport_add_phy_to_an_existing_port - adding new phy to existing port
|
|
+ * mpt3sas_transport_add_phy_to_an_existing_port - adding new phy to existing port
|
|
* @ioc: per adapter object
|
|
* @sas_node: sas node object (either expander or sas host)
|
|
* @mpt3sas_phy: mpt3sas per phy object
|
|
* @sas_address: sas address of device/expander were phy needs to be added to
|
|
+ * @port: hba port entry
|
|
*/
|
|
-static void
|
|
-_transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
+void
|
|
+mpt3sas_transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
struct _sas_node *sas_node, struct _sas_phy *mpt3sas_phy,
|
|
- u64 sas_address)
|
|
+ u64 sas_address, struct hba_port *port)
|
|
{
|
|
struct _sas_port *mpt3sas_port;
|
|
struct _sas_phy *phy_srch;
|
|
@@ -520,11 +521,16 @@ _transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
if (mpt3sas_phy->phy_belongs_to_port == 1)
|
|
return;
|
|
|
|
+ if (!port)
|
|
+ return;
|
|
+
|
|
list_for_each_entry(mpt3sas_port, &sas_node->sas_port_list,
|
|
port_list) {
|
|
if (mpt3sas_port->remote_identify.sas_address !=
|
|
sas_address)
|
|
continue;
|
|
+ if (mpt3sas_port->hba_port != port)
|
|
+ continue;
|
|
list_for_each_entry(phy_srch, &mpt3sas_port->phy_list,
|
|
port_siblings) {
|
|
if (phy_srch == mpt3sas_phy)
|
|
@@ -537,13 +543,13 @@ _transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
}
|
|
|
|
/**
|
|
- * _transport_del_phy_from_an_existing_port - delete phy from existing port
|
|
+ * mpt3sas_transport_del_phy_from_an_existing_port - delete phy from existing port
|
|
* @ioc: per adapter object
|
|
* @sas_node: sas node object (either expander or sas host)
|
|
* @mpt3sas_phy: mpt3sas per phy object
|
|
*/
|
|
-static void
|
|
-_transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
+void
|
|
+mpt3sas_transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
struct _sas_node *sas_node, struct _sas_phy *mpt3sas_phy)
|
|
{
|
|
struct _sas_port *mpt3sas_port, *next;
|
|
@@ -559,7 +565,11 @@ _transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
|
|
if (phy_srch != mpt3sas_phy)
|
|
continue;
|
|
|
|
- if (mpt3sas_port->num_phys == 1)
|
|
+ /*
|
|
+ * Don't delete port during host reset,
|
|
+ * just delete phy.
|
|
+ */
|
|
+ if (mpt3sas_port->num_phys == 1 && !ioc->shost_recovery)
|
|
_transport_delete_port(ioc, mpt3sas_port);
|
|
else
|
|
_transport_delete_phy(ioc, mpt3sas_port,
|
|
@@ -590,8 +600,8 @@ _transport_sanity_check(struct MPT3SAS_ADAPTER *ioc, struct _sas_node *sas_node,
|
|
if (sas_node->phy[i].port != port)
|
|
continue;
|
|
if (sas_node->phy[i].phy_belongs_to_port == 1)
|
|
- _transport_del_phy_from_an_existing_port(ioc, sas_node,
|
|
- &sas_node->phy[i]);
|
|
+ mpt3sas_transport_del_phy_from_an_existing_port(ioc,
|
|
+ sas_node, &sas_node->phy[i]);
|
|
}
|
|
}
|
|
|
|
@@ -1040,8 +1050,6 @@ mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc,
|
|
if (handle && (link_rate >= MPI2_SAS_NEG_LINK_RATE_1_5)) {
|
|
_transport_set_identify(ioc, handle,
|
|
&mpt3sas_phy->remote_identify);
|
|
- _transport_add_phy_to_an_existing_port(ioc, sas_node,
|
|
- mpt3sas_phy, mpt3sas_phy->remote_identify.sas_address);
|
|
if (sas_node->handle <= ioc->sas_hba.num_phys) {
|
|
list_for_each_entry(hba_port,
|
|
&ioc->port_table_list, list) {
|
|
@@ -1051,6 +1059,9 @@ mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc,
|
|
(1 << mpt3sas_phy->phy_id);
|
|
}
|
|
}
|
|
+ mpt3sas_transport_add_phy_to_an_existing_port(ioc, sas_node,
|
|
+ mpt3sas_phy, mpt3sas_phy->remote_identify.sas_address,
|
|
+ port);
|
|
} else
|
|
memset(&mpt3sas_phy->remote_identify, 0 , sizeof(struct
|
|
sas_identify));
|
|
--
|
|
2.13.6
|
|
|