aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorSreekanth Reddy <Sreekanth.Reddy@lsi.com>2013-06-28 18:23:02 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-07-09 03:48:54 -0400
commit14be49ac965ebd3f8561d57e01ddb22f93f9b454 (patch)
tree41b83ce266a980b762764151fb357706e4c23c51 /drivers/scsi
parentb65cfedf4560af65305bd7b3b9f26c02c6fb3660 (diff)
[SCSI] 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. Signed-off-by: Sreekanth Reddy <Sreekanth.Reddy@lsi.com> Cc: stable@vger.kernel.org Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_scsih.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 9ebc9dce3046..632eba75971c 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -6406,7 +6406,7 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc)
6406 handle))) { 6406 handle))) {
6407 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6407 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6408 MPI2_IOCSTATUS_MASK; 6408 MPI2_IOCSTATUS_MASK;
6409 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6409 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6410 break; 6410 break;
6411 handle = le16_to_cpu(sas_device_pg0.DevHandle); 6411 handle = le16_to_cpu(sas_device_pg0.DevHandle);
6412 device_info = le32_to_cpu(sas_device_pg0.DeviceInfo); 6412 device_info = le32_to_cpu(sas_device_pg0.DeviceInfo);
@@ -6508,7 +6508,7 @@ _scsih_search_responding_raid_devices(struct MPT3SAS_ADAPTER *ioc)
6508 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { 6508 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) {
6509 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6509 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6510 MPI2_IOCSTATUS_MASK; 6510 MPI2_IOCSTATUS_MASK;
6511 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6511 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6512 break; 6512 break;
6513 handle = le16_to_cpu(volume_pg1.DevHandle); 6513 handle = le16_to_cpu(volume_pg1.DevHandle);
6514 6514
@@ -6532,7 +6532,7 @@ _scsih_search_responding_raid_devices(struct MPT3SAS_ADAPTER *ioc)
6532 phys_disk_num))) { 6532 phys_disk_num))) {
6533 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6533 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6534 MPI2_IOCSTATUS_MASK; 6534 MPI2_IOCSTATUS_MASK;
6535 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6535 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6536 break; 6536 break;
6537 phys_disk_num = pd_pg0.PhysDiskNum; 6537 phys_disk_num = pd_pg0.PhysDiskNum;
6538 handle = le16_to_cpu(pd_pg0.DevHandle); 6538 handle = le16_to_cpu(pd_pg0.DevHandle);
@@ -6611,7 +6611,7 @@ _scsih_search_responding_expanders(struct MPT3SAS_ADAPTER *ioc)
6611 6611
6612 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6612 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6613 MPI2_IOCSTATUS_MASK; 6613 MPI2_IOCSTATUS_MASK;
6614 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6614 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6615 break; 6615 break;
6616 6616
6617 handle = le16_to_cpu(expander_pg0.DevHandle); 6617 handle = le16_to_cpu(expander_pg0.DevHandle);
@@ -6756,8 +6756,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc)
6756 MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL, handle))) { 6756 MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL, handle))) {
6757 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6757 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6758 MPI2_IOCSTATUS_MASK; 6758 MPI2_IOCSTATUS_MASK;
6759 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
6760 break;
6761 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 6759 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
6762 pr_info(MPT3SAS_FMT "\tbreak from expander scan: " \ 6760 pr_info(MPT3SAS_FMT "\tbreak from expander scan: " \
6763 "ioc_status(0x%04x), loginfo(0x%08x)\n", 6761 "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -6801,8 +6799,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc)
6801 phys_disk_num))) { 6799 phys_disk_num))) {
6802 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6800 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6803 MPI2_IOCSTATUS_MASK; 6801 MPI2_IOCSTATUS_MASK;
6804 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
6805 break;
6806 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 6802 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
6807 pr_info(MPT3SAS_FMT "\tbreak from phys disk scan: "\ 6803 pr_info(MPT3SAS_FMT "\tbreak from phys disk scan: "\
6808 "ioc_status(0x%04x), loginfo(0x%08x)\n", 6804 "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -6868,8 +6864,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc)
6868 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { 6864 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) {
6869 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6865 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6870 MPI2_IOCSTATUS_MASK; 6866 MPI2_IOCSTATUS_MASK;
6871 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
6872 break;
6873 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 6867 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
6874 pr_info(MPT3SAS_FMT "\tbreak from volume scan: " \ 6868 pr_info(MPT3SAS_FMT "\tbreak from volume scan: " \
6875 "ioc_status(0x%04x), loginfo(0x%08x)\n", 6869 "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -6928,8 +6922,6 @@ _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc)
6928 handle))) { 6922 handle))) {
6929 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6923 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6930 MPI2_IOCSTATUS_MASK; 6924 MPI2_IOCSTATUS_MASK;
6931 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
6932 break;
6933 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 6925 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
6934 pr_info(MPT3SAS_FMT "\tbreak from end device scan:"\ 6926 pr_info(MPT3SAS_FMT "\tbreak from end device scan:"\
6935 " ioc_status(0x%04x), loginfo(0x%08x)\n", 6927 " ioc_status(0x%04x), loginfo(0x%08x)\n",