mpt3sas: Infinite loops can occur if MPI2_IOCSTATUS_CONFIG_INVALID_PAGE is not returned
Subsystems (2)
Quoted 21 lines · Sreekanth Reddy
Infinite loop can occur if IOCStatus is not equal to
MPI2_IOCSTATUS_CONFIG_INVALID_PAGEvalue in the while loops in functions_scsih_search_responding_sas_devices,_scsih_search_responding_raid_devicesand_scsih_search_responding_expandersSo, Instead of checking for
MPI2_IOCSTATUS_CONFIG_INVALID_PAGEvalue, in this patch code is modified to check for IOCStatus not equals toMPI2_IOCSTATUS_SUCCESSto break the while loop.Signed-off-by Sreekanth Reddy <[email protected]>--- drivers/scsi/mpt3sas/mpt3sas_scsih.c | 16 ++++------------ 1 files changed, 4 insertions(+), 12 deletions(-)drivers/scsi/mpt3sas/mpt3sas_scsih.c +0
-0
drivers/scsi/mpt3sas/mpt3sas_scsih.c _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) · line 6412
Quoted 8 lines
drivers/scsi/mpt3sas/mpt3sas_scsih.c +1
-1@@ -6406,7 +6406,7 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) handle))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) +if (ioc_status !=MPI2_IOCSTATUS_SUCCESS )break ; handle =le16_to_cpu (sas_device_pg0.DevHandle); device_info =le32_to_cpu (sas_device_pg0.DeviceInfo);
Doesn't the same apply to the code mpt2sas driver you copied this code from?
Bjørn
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 4/7 mpt3sas: Infinite loops can occur if MPI2_IOCSTATUS_CONFIG_INVALID_PAGE is not returned
Infinite loop can occur if IOCStatus is not equal to MPI2_IOCSTATUS_CONFIG_INVALID_PAGE value in the while loops in functions _scsih_search_responding_sas_devices, _scsih_search_responding_raid_devices and _scsih_search_responding_expanders
So, Instead of checking for MPI2_IOCSTATUS_CONFIG_INVALID_PAGE value, in this patch code is modified to check for IOCStatus not equals to MPI2_IOCSTATUS_SUCCESS to break the while loop.
--- drivers/scsi/mpt3sas/mpt3sas_scsih.c | 16 ++++------------ 1 files changed, 4 insertions(+), 12 deletions(-)
drivers/scsi/mpt3sas/mpt3sas_scsih.c +4 -12
@@ -6406,7 +6406,7 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) handle))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) +if (ioc_status !=MPI2_IOCSTATUS_SUCCESS )break ; handle =le16_to_cpu (sas_device_pg0.DevHandle); device_info =le32_to_cpu (sas_device_pg0.DeviceInfo);
@@ -6508,7 +6508,7 @@ _scsih_search_responding_raid_devices(struct MPT3SAS_ADAPTER *ioc) &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) +if (ioc_status !=MPI2_IOCSTATUS_SUCCESS )break ; handle =le16_to_cpu (volume_pg1.DevHandle);
@@ -6532,7 +6532,7 @@ _scsih_search_responding_raid_devices(struct MPT3SAS_ADAPTER *ioc) phys_disk_num))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) +if (ioc_status !=MPI2_IOCSTATUS_SUCCESS )break ; phys_disk_num = pd_pg0.PhysDiskNum; handle =le16_to_cpu (pd_pg0.DevHandle);
@@ -6611,7 +6611,7 @@ _scsih_search_responding_expanders(struct MPT3SAS_ADAPTER *ioc) ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) +if (ioc_status !=MPI2_IOCSTATUS_SUCCESS )break ; handle =le16_to_cpu (expander_pg0.DevHandle);
@@ -6756,8 +6756,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc) MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL, handle))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) -break ;if (ioc_status !=MPI2_IOCSTATUS_SUCCESS ) { pr_info(MPT3SAS_FMT "\tbreak from expander scan: " \ "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -6801,8 +6799,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc) phys_disk_num))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) -break ;if (ioc_status !=MPI2_IOCSTATUS_SUCCESS ) { pr_info(MPT3SAS_FMT "\tbreak from phys disk scan: "\ "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -6868,8 +6864,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc) &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) -break ;if (ioc_status !=MPI2_IOCSTATUS_SUCCESS ) { pr_info(MPT3SAS_FMT "\tbreak from volume scan: " \ "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -6928,8 +6922,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc) handle))) { ioc_status =le16_to_cpu (mpi_reply.IOCStatus) &MPI2_IOCSTATUS_MASK ; -if (ioc_status ==MPI2_IOCSTATUS_CONFIG_INVALID_PAGE ) -break ;if (ioc_status !=MPI2_IOCSTATUS_SUCCESS ) { pr_info(MPT3SAS_FMT "\tbreak from end device scan:"\ " ioc_status(0x%04x), loginfo(0x%08x)\n",
Signature · 1 line
1.7.3