PERFORCE change 110758 for review

Matt Jacob mjacob at FreeBSD.org
Thu Nov 30 14:27:15 PST 2006


http://perforce.freebsd.org/chv.cgi?CH=110758

Change 110758 by mjacob at newisp on 2006/11/30 22:26:42

	Do some cleanups to get more information out of the data structures.

Affected files ...

.. //depot/projects/newisp/dev/mpt/mpt_raid.c#4 edit

Differences ...

==== //depot/projects/newisp/dev/mpt/mpt_raid.c#4 (text+ko) ====

@@ -792,7 +792,6 @@
 	mpt_disk = mpt->raid_disks + ccb->ccb_h.target_id;
 	if (ccb->ccb_h.target_id < mpt->raid_max_disks
 	 && (mpt_disk->flags & MPT_RDF_ACTIVE) != 0) {
-
 		*tgt = mpt_disk->config_page.PhysDiskID;
 		return (0);
 	}
@@ -808,6 +807,9 @@
 	CONFIG_PAGE_IOC_2_RAID_VOL *ioc_vol;
 	CONFIG_PAGE_IOC_2_RAID_VOL *ioc_last_vol;
 
+	if (mpt->ioc_page2 == NULL || mpt->ioc_page2->MaxPhysDisks == 0) {
+		return (0);
+	}
 	ioc_vol = mpt->ioc_page2->RaidVolume;
 	ioc_last_vol = ioc_vol + mpt->ioc_page2->NumActiveVolumes;
 	for (;ioc_vol != ioc_last_vol; ioc_vol++) {
@@ -1106,20 +1108,66 @@
 	for (i = 0; i < vol_pg->NumPhysDisks; i++){
 		struct mpt_raid_disk *mpt_disk;
 		CONFIG_PAGE_RAID_PHYS_DISK_0 *disk_pg;
+		int pt_bus = cam_sim_bus(mpt->phydisk_sim);
+		U8 f, s;
 
-		mpt_disk = mpt->raid_disks 
-			 + vol_pg->PhysDisk[i].PhysDiskNum;
+		mpt_disk = mpt->raid_disks + vol_pg->PhysDisk[i].PhysDiskNum;
 		disk_pg = &mpt_disk->config_page;
 		mpt_prtc(mpt, "      ");
-		mpt_prtc(mpt, "(%s:%d:%d): ", device_get_nameunit(mpt->dev),
-			 disk_pg->PhysDiskBus, disk_pg->PhysDiskID);
-		if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM)
-			mpt_prtc(mpt, "%s\n",
-				 mpt_disk->member_number == 0
-			       ? "Primary" : "Secondary");
-		else
-			mpt_prtc(mpt, "Stripe Position %d\n",
+		mpt_prtc(mpt, "(%s:%d:%d:0): ", device_get_nameunit(mpt->dev),
+			 pt_bus, disk_pg->PhysDiskID);
+		if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM) {
+			mpt_prtc(mpt, "%s", mpt_disk->member_number == 0?
+			    "Primary" : "Secondary");
+		} else {
+			mpt_prtc(mpt, "Stripe Position %d",
 				 mpt_disk->member_number);
+		}
+		f = disk_pg->PhysDiskStatus.Flags;
+		s = disk_pg->PhysDiskStatus.State;
+		if (f & MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC) {
+			mpt_prtc(mpt, " Out of Sync");
+		}
+		if (f & MPI_PHYSDISK0_STATUS_FLAG_QUIESCED) {
+			mpt_prtc(mpt, " Quiesced");
+		}
+		if (f & MPI_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME) {
+			mpt_prtc(mpt, " Inactive");
+		}
+		if (f & MPI_PHYSDISK0_STATUS_FLAG_OPTIMAL_PREVIOUS) {
+			mpt_prtc(mpt, " Was Optimal");
+		}
+		if (f & MPI_PHYSDISK0_STATUS_FLAG_NOT_OPTIMAL_PREVIOUS) {
+			mpt_prtc(mpt, " Was Non-Optimal");
+		}
+		switch (s) {
+		case MPI_PHYSDISK0_STATUS_ONLINE:
+			mpt_prtc(mpt, " Online");
+			break;
+		case MPI_PHYSDISK0_STATUS_MISSING:
+			mpt_prtc(mpt, " Missing");
+			break;
+		case MPI_PHYSDISK0_STATUS_NOT_COMPATIBLE:
+			mpt_prtc(mpt, " Incompatible");
+			break;
+		case MPI_PHYSDISK0_STATUS_FAILED:
+			mpt_prtc(mpt, " Failed");
+			break;
+		case MPI_PHYSDISK0_STATUS_INITIALIZING:
+			mpt_prtc(mpt, " Initializing");
+			break;
+		case MPI_PHYSDISK0_STATUS_OFFLINE_REQUESTED:
+			mpt_prtc(mpt, " Requested Offline");
+			break;
+		case MPI_PHYSDISK0_STATUS_FAILED_REQUESTED:
+			mpt_prtc(mpt, " Requested Failed");
+			break;
+		case MPI_PHYSDISK0_STATUS_OTHER_OFFLINE:
+		default:
+			mpt_prtc(mpt, " Offline Other (%x)", s);
+			break;
+		}
+		mpt_prtc(mpt, "\n");
 	}
 }
 
@@ -1127,15 +1175,16 @@
 mpt_announce_disk(struct mpt_softc *mpt, struct mpt_raid_disk *mpt_disk)
 {
 	CONFIG_PAGE_RAID_PHYS_DISK_0 *disk_pg;
+	int rd_bus = cam_sim_bus(mpt->sim);
+	int pt_bus = cam_sim_bus(mpt->phydisk_sim);
 	u_int i;
 
 	disk_pg = &mpt_disk->config_page;
 	mpt_disk_prt(mpt, mpt_disk,
-		     "Physical (%s:%d:%d), Pass-thru (%s:%d:%d)\n",
-		     device_get_nameunit(mpt->dev), disk_pg->PhysDiskBus, 
+		     "Physical (%s:%d:%d:0), Pass-thru (%s:%d:%d:0)\n",
+		     device_get_nameunit(mpt->dev), rd_bus,
 		     disk_pg->PhysDiskID, device_get_nameunit(mpt->dev),
-		     /*bus*/1, mpt_disk - mpt->raid_disks);
-
+		     pt_bus, mpt_disk - mpt->raid_disks);
 	if (disk_pg->PhysDiskSettings.HotSparePool == 0)
 		return;
 	mpt_disk_prt(mpt, mpt_disk, "Member of Hot Spare Pool%s",
@@ -1218,8 +1267,9 @@
 		mpt_disk = mpt->raid_disks + vol_pg->PhysDisk[i].PhysDiskNum;
 		mpt_disk->volume = mpt_vol;
 		mpt_disk->member_number = vol_pg->PhysDisk[i].PhysDiskMap;
-		if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM)
+		if (vol_pg->VolumeType == MPI_RAID_VOL_TYPE_IM) {
 			mpt_disk->member_number--;
+		}
 	}
 
 	if ((vol_pg->VolumeStatus.Flags


More information about the p4-projects mailing list