6918908 system panic after moving cable from one HBA to another with 1.9.1 special fw
authorVictor Li <Victor.Li@Sun.COM>
Fri, 29 Jan 2010 07:46:53 +0800
changeset 11592 79e542fbe6ba
parent 11591 3f77abb5edb9
child 11593 089b3ea7d6ab
6918908 system panic after moving cable from one HBA to another with 1.9.1 special fw
usr/src/uts/common/io/scsi/adapters/scsi_vhci/mpapi_impl.c
--- a/usr/src/uts/common/io/scsi/adapters/scsi_vhci/mpapi_impl.c	Thu Jan 28 13:55:21 2010 -0800
+++ b/usr/src/uts/common/io/scsi/adapters/scsi_vhci/mpapi_impl.c	Fri Jan 29 07:46:53 2010 +0800
@@ -4226,44 +4226,33 @@
 			 * but ignore to update on another one.
 			 */
 			tgt_port = NULL;
-			if ((mdi_prop_lookup_string(path_data->resp,
+			if (path_data->valid == 1 &&
+			    (mdi_prop_lookup_string(path_data->resp,
 			    SCSI_ADDR_PROP_TARGET_PORT,
 			    &tgt_port) == DDI_PROP_SUCCESS) &&
 			    tgt_port != NULL &&
 			    (vhci_mpapi_check_tp_in_tpg(
 			    tpg_data, tgt_port) == 1)) {
-				if (path_data->valid == 1) {
-					VHCI_DEBUG(4, (CE_NOTE, NULL,
-					    "vhci_mpapi_update_tpg_acc_state_"
-					    "for_ lu: Operating on LUN(%s), "
-					    " PATH(%p), TPG(%x: %s)\n",
-					    lu_data->prop.name, path_data->resp,
-					    tpg_data->prop.tpgId,
-					    tpg_data->pclass));
-					if (MDI_PI_IS_ONLINE(path_data->resp)) {
-						tpg_data->prop.accessState =
-						    MP_DRVR_ACCESS_STATE_ACTIVE;
-						break;
-					} else if (MDI_PI_IS_STANDBY(
-					    path_data->resp)) {
+				VHCI_DEBUG(4, (CE_NOTE, NULL,
+				    "vhci_mpapi_update_tpg_acc_state_"
+				    "for_ lu: Operating on LUN(%s), "
+				    " PATH(%p), TPG(%x: %s)\n",
+				    lu_data->prop.name, path_data->resp,
+				    tpg_data->prop.tpgId,
+				    tpg_data->pclass));
+				if (MDI_PI_IS_ONLINE(path_data->resp)) {
+					tpg_data->prop.accessState =
+					    MP_DRVR_ACCESS_STATE_ACTIVE;
+					break;
+				} else if (MDI_PI_IS_STANDBY(path_data->resp)) {
 					tpg_data->prop.accessState =
 					    MP_DRVR_ACCESS_STATE_STANDBY;
-						break;
-					} else {
-					tpg_data->prop.accessState =
-					    MP_DRVR_ACCESS_STATE_UNAVAILABLE;
-					}
+					break;
 				} else {
-					/*
-					 * if path is not valid any more,
-					 * mark the associated tpg as
-					 * unavailable.
-					 */
 					tpg_data->prop.accessState =
 					    MP_DRVR_ACCESS_STATE_UNAVAILABLE;
 				}
 			}
-
 			path_list = path_list->next;
 		}
 		tpg_list = tpg_list->next;