protected void UpdateVolumeDrives() { foreach (Volume volume in this.volumes) { MarvellVolume marvellVolume = (MarvellVolume)volume; foreach (short blkid in marvellVolume.BlockIds) { short driveIdFromBlockId = this.GetDriveIdFromBlockId(blkid); if (driveIdFromBlockId != -1) { Drive drive = this.FindDrive(driveIdFromBlockId.ToString()); if (drive != null) { drive.Domain = DriveDomain.DRIVE_DOMAIN_RAID; marvellVolume.Drives.Add(drive); } } } } foreach (Drive drive2 in this.drives) { MarvellDrive marvellDrive = (MarvellDrive)drive2; if (marvellDrive.Domain == DriveDomain.DRIVE_DOMAIN_UNKNOWN) { StorApiStatus a = StorApiStatusEnum.STOR_NO_ERROR; SpacesController spacesController = SpacesController.GetSpacesController(); SpacesDrive spacesDrive = null; a = spacesController.GetSpacesDrive(marvellDrive.Serial, ref spacesDrive); if (a == StorApiStatusEnum.STOR_NO_ERROR && spacesDrive != null) { bool flag = false; a = spacesController.IsDriveConfiguredForSpaces(spacesDrive, ref flag); if (a == StorApiStatusEnum.STOR_NO_ERROR && flag) { marvellDrive.Domain = DriveDomain.DRIVE_DOMAIN_SPACES; } } } } }
protected MarvellVolume MakeVolume(MvApi.MvApi.LD_Info ldInfo) { byte b = 0; MarvellVolume marvellVolume = new MarvellVolume(ldInfo.ID, this); marvellVolume.Name = MarvellUtil.GetApiString(ldInfo.Name, 16); marvellVolume.RaidLevel = MarvellUtil.ToStorApiRaidLevel(ldInfo.RaidMode); marvellVolume.StripeSize = (ulong)((long)(ldInfo.StripeBlockSize * 1024)); marvellVolume.Status = MarvellUtil.ToStorApiVolumeStatus(ldInfo.Status); marvellVolume.Capacity = ldInfo.Size.ToUlong() * 1024UL; for (byte b2 = 0; b2 < ldInfo.HDCount; b2 += 1) { marvellVolume.BlockIds.Add(ldInfo.BlockIDs[(int)b2]); } short[] id = new short[] { ldInfo.ID }; lock (MarvellUtil.mvApiLock) { try { b = MvApi.MvApi.MV_DiskHasOS(this.AdapterId, 0, 1, id); } catch (Exception ex) { Logger.Warn("MakeVolume MV_DiskHasOS exception: {0}", new object[] { ex }); throw ex; } } if (b == 158) { marvellVolume.IsSystem = true; } if (ldInfo.BGAStatus != 0) { MvApi.MvApi.LD_Status_Request ld_Status_Request = default(MvApi.MvApi.LD_Status_Request); ld_Status_Request.header.Init(); ld_Status_Request.header.requestType = 2; ld_Status_Request.header.startingIndexOrId = ldInfo.ID; ld_Status_Request.header.numRequested = 1; lock (MarvellUtil.mvApiLock) { try { b = MvApi.MvApi.MV_LD_GetStatus(this.AdapterId, ref ld_Status_Request); } catch (Exception ex2) { Logger.Warn("MV_LD_GetStatus exception: {0}", new object[] { ex2 }); throw ex2; } } if (b == 0) { marvellVolume.Progress = (float)ld_Status_Request.ldStatus[0].BgaPercentage; if (ld_Status_Request.ldStatus[0].Bga != 0 && marvellVolume.Status != VolumeStatus.VOLUME_FAILED) { VolumeStatus volumeStatus = MarvellUtil.ToStorApiVolumeStatusBGA(ld_Status_Request.ldStatus[0].Bga); if (volumeStatus != VolumeStatus.VOLUME_UNKNOWN) { marvellVolume.Status = volumeStatus; } } if (ld_Status_Request.ldStatus[0].Bga == 32) { MvApi.MvApi.LD_Info ld_Info = default(MvApi.MvApi.LD_Info); lock (MarvellUtil.mvApiLock) { try { b = MvApi.MvApi.MV_LD_GetTargetLDInfo(this.AdapterId, ldInfo.ID, ref ld_Info); } catch (Exception ex3) { Logger.Warn("MV_LD_GetTargetLDInfo exception: {0}", new object[] { ex3 }); throw ex3; } } if (b == 0) { marvellVolume.RaidLevel = MarvellUtil.ToStorApiRaidLevel(ld_Info.RaidMode); marvellVolume.StripeSize = (ulong)ld_Info.StripeBlockSize; marvellVolume.BlockIds.Clear(); for (byte b3 = 0; b3 < ld_Info.HDCount; b3 += 1) { marvellVolume.BlockIds.Add(ld_Info.BlockIDs[(int)b3]); } } } } } return(marvellVolume); }