aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas/mpt2sas_scsih.c
diff options
context:
space:
mode:
authorSreekanth Reddy <Sreekanth.Reddy@lsi.com>2013-07-25 01:59:45 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-09-03 10:27:52 -0400
commit1c50e8d26e2c2c810f28730a13d885c64fa2058d (patch)
tree71abf96357823ee4135e455b79af4607d7e03a5b /drivers/scsi/mpt2sas/mpt2sas_scsih.c
parentd648d5a9a803eb94d6a13beee3e9d40e8f09a9ed (diff)
[SCSI] mpt2sas: Infinite loop 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> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_scsih.c')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_scsih.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index e592b8ee81b7..9854385deadf 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -6753,7 +6753,7 @@ _scsih_search_responding_sas_devices(struct MPT2SAS_ADAPTER *ioc)
6753 handle))) { 6753 handle))) {
6754 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6754 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6755 MPI2_IOCSTATUS_MASK; 6755 MPI2_IOCSTATUS_MASK;
6756 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6756 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6757 break; 6757 break;
6758 handle = le16_to_cpu(sas_device_pg0.DevHandle); 6758 handle = le16_to_cpu(sas_device_pg0.DevHandle);
6759 device_info = le32_to_cpu(sas_device_pg0.DeviceInfo); 6759 device_info = le32_to_cpu(sas_device_pg0.DeviceInfo);
@@ -6862,7 +6862,7 @@ _scsih_search_responding_raid_devices(struct MPT2SAS_ADAPTER *ioc)
6862 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { 6862 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) {
6863 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6863 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6864 MPI2_IOCSTATUS_MASK; 6864 MPI2_IOCSTATUS_MASK;
6865 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6865 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6866 break; 6866 break;
6867 handle = le16_to_cpu(volume_pg1.DevHandle); 6867 handle = le16_to_cpu(volume_pg1.DevHandle);
6868 6868
@@ -6887,7 +6887,7 @@ _scsih_search_responding_raid_devices(struct MPT2SAS_ADAPTER *ioc)
6887 phys_disk_num))) { 6887 phys_disk_num))) {
6888 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6888 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6889 MPI2_IOCSTATUS_MASK; 6889 MPI2_IOCSTATUS_MASK;
6890 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6890 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6891 break; 6891 break;
6892 phys_disk_num = pd_pg0.PhysDiskNum; 6892 phys_disk_num = pd_pg0.PhysDiskNum;
6893 handle = le16_to_cpu(pd_pg0.DevHandle); 6893 handle = le16_to_cpu(pd_pg0.DevHandle);
@@ -6967,7 +6967,7 @@ _scsih_search_responding_expanders(struct MPT2SAS_ADAPTER *ioc)
6967 6967
6968 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 6968 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
6969 MPI2_IOCSTATUS_MASK; 6969 MPI2_IOCSTATUS_MASK;
6970 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) 6970 if (ioc_status != MPI2_IOCSTATUS_SUCCESS)
6971 break; 6971 break;
6972 6972
6973 handle = le16_to_cpu(expander_pg0.DevHandle); 6973 handle = le16_to_cpu(expander_pg0.DevHandle);
@@ -7109,8 +7109,6 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc)
7109 MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL, handle))) { 7109 MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL, handle))) {
7110 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 7110 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
7111 MPI2_IOCSTATUS_MASK; 7111 MPI2_IOCSTATUS_MASK;
7112 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
7113 break;
7114 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 7112 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
7115 printk(MPT2SAS_INFO_FMT "\tbreak from expander scan: " 7113 printk(MPT2SAS_INFO_FMT "\tbreak from expander scan: "
7116 "ioc_status(0x%04x), loginfo(0x%08x)\n", 7114 "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -7153,8 +7151,6 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc)
7153 phys_disk_num))) { 7151 phys_disk_num))) {
7154 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 7152 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
7155 MPI2_IOCSTATUS_MASK; 7153 MPI2_IOCSTATUS_MASK;
7156 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
7157 break;
7158 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 7154 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
7159 printk(MPT2SAS_INFO_FMT "\tbreak from phys disk scan:" 7155 printk(MPT2SAS_INFO_FMT "\tbreak from phys disk scan:"
7160 "ioc_status(0x%04x), loginfo(0x%08x)\n", 7156 "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -7219,8 +7215,6 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc)
7219 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { 7215 &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) {
7220 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 7216 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
7221 MPI2_IOCSTATUS_MASK; 7217 MPI2_IOCSTATUS_MASK;
7222 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
7223 break;
7224 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 7218 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
7225 printk(MPT2SAS_INFO_FMT "\tbreak from volume scan: " 7219 printk(MPT2SAS_INFO_FMT "\tbreak from volume scan: "
7226 "ioc_status(0x%04x), loginfo(0x%08x)\n", 7220 "ioc_status(0x%04x), loginfo(0x%08x)\n",
@@ -7278,8 +7272,6 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc)
7278 handle))) { 7272 handle))) {
7279 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 7273 ioc_status = le16_to_cpu(mpi_reply.IOCStatus) &
7280 MPI2_IOCSTATUS_MASK; 7274 MPI2_IOCSTATUS_MASK;
7281 if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
7282 break;
7283 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 7275 if (ioc_status != MPI2_IOCSTATUS_SUCCESS) {
7284 printk(MPT2SAS_INFO_FMT "\tbreak from end device scan:" 7276 printk(MPT2SAS_INFO_FMT "\tbreak from end device scan:"
7285 " ioc_status(0x%04x), loginfo(0x%08x)\n", 7277 " ioc_status(0x%04x), loginfo(0x%08x)\n",