Whenever the driver is adding the vSES to virtual-phys list then the driver is reinitializing this list every time. Hence those vSES devices which were added earlier to this same list are lost. So, Even though multiple vSES devices are configured in IOC; but while scanning the vSES devices driver finds only one vSES device in the list and hence adds only that device to SML. So, don't reinitialize this list every time a new vSES device is added to it.
Cc: stable@vger.kernel.org #v5.11.10+ Signed-off-by: Sreekanth Reddy sreekanth.reddy@broadcom.com --- drivers/scsi/mpt3sas/mpt3sas_scsih.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index 6aa6de729187..ae1973878cc7 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -6483,6 +6483,9 @@ _scsih_alloc_vphy(struct MPT3SAS_ADAPTER *ioc, u8 port_id, u8 phy_num) if (!vphy) return NULL;
+ if (!port->vphys_mask) + INIT_LIST_HEAD(&port->vphys_list); + /* * Enable bit corresponding to HBA phy number on its * parent hba_port object's vphys_mask field. @@ -6490,7 +6493,6 @@ _scsih_alloc_vphy(struct MPT3SAS_ADAPTER *ioc, u8 port_id, u8 phy_num) port->vphys_mask |= (1 << phy_num); vphy->phy_mask |= (1 << phy_num);
- INIT_LIST_HEAD(&port->vphys_list); list_add_tail(&vphy->list, &port->vphys_list);
ioc_info(ioc,