From owner-p4-projects@FreeBSD.ORG Thu Nov 30 22:27:15 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E044416A407; Thu, 30 Nov 2006 22:27:14 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8F0C916A412 for ; Thu, 30 Nov 2006 22:27:14 +0000 (UTC) (envelope-from mjacob@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.FreeBSD.org (Postfix) with ESMTP id D2F3343CBA for ; Thu, 30 Nov 2006 22:26:59 +0000 (GMT) (envelope-from mjacob@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id kAUMR9tw082904 for ; Thu, 30 Nov 2006 22:27:09 GMT (envelope-from mjacob@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id kAUMR9vL082901 for perforce@freebsd.org; Thu, 30 Nov 2006 22:27:09 GMT (envelope-from mjacob@freebsd.org) Date: Thu, 30 Nov 2006 22:27:09 GMT Message-Id: <200611302227.kAUMR9vL082901@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mjacob@freebsd.org using -f From: Matt Jacob To: Perforce Change Reviews Cc: Subject: PERFORCE change 110758 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Nov 2006 22:27:15 -0000 http://perforce.freebsd.org/chv.cgi?CH=110758 Change 110758 by mjacob@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