public override StorApiStatus CreateVolume(CreateVolumeData data) { StorApiStatus storApiStatus = StorApiStatusEnum.STOR_NO_ERROR; byte mvstatus = 0; MvApi.MvApi.Create_LD_Param create_LD_Param = default(MvApi.MvApi.Create_LD_Param); int num = 0; create_LD_Param.RaidMode = MarvellUtil.ToMarvellRaidLevel(data.level); create_LD_Param.RoundingScheme = 0; create_LD_Param.InitializationOption = 0; create_LD_Param.CachePolicy = (byte)(data.writeCache ? 0 : 1); create_LD_Param.StripeBlockSize = (short)data.stripeSize; create_LD_Param.HDIDs = new short[128]; foreach (Drive drive in data.drives) { if (num >= 128) { return(StorApiStatusEnum.STOR_INVALID_PARAM); } create_LD_Param.HDIDs[num] = ((MarvellDrive)drive).MvId; num++; } create_LD_Param.HDCount = (byte)num; create_LD_Param.Name = new byte[16]; byte[] bytes = Encoding.ASCII.GetBytes(data.name); if (bytes.Length >= 16) { return(StorApiStatusEnum.STOR_INVALID_PARAM); } bytes.CopyTo(create_LD_Param.Name, 0); lock (MarvellUtil.mvApiLock) { try { mvstatus = MvApi.MvApi.MV_LD_Create(this.AdapterId, ref create_LD_Param); } catch (Exception ex) { Logger.Warn("MV_LD_Create exception: {0}", new object[] { ex }); return(StorApiStatusEnum.STOR_API_ERROR); } } return(MarvellUtil.ToStorApiStatus(mvstatus)); }
public override StorApiStatus Migrate(RaidLevel newLevel, List <Drive> newDrives) { StorApiStatus storApiStatus = StorApiStatusEnum.STOR_NO_ERROR; byte b = 0; MvApi.MvApi.Create_LD_Param create_LD_Param = default(MvApi.MvApi.Create_LD_Param); MvApi.MvApi.LD_Config_Request ld_Config_Request = default(MvApi.MvApi.LD_Config_Request); int num = 0; ld_Config_Request.header.Init(); ld_Config_Request.header.requestType = 2; ld_Config_Request.header.startingIndexOrId = this.mvid; ld_Config_Request.header.numRequested = 1; lock (MarvellUtil.mvApiLock) { try { b = MvApi.MvApi.MV_LD_GetConfig(((MarvellController)this.controller).AdapterId, ref ld_Config_Request); } catch (Exception ex) { Logger.Warn("MV_LD_GetConfig exception: {0}", new object[] { ex }); return(StorApiStatusEnum.STOR_API_ERROR); } if (b != 0) { storApiStatus = MarvellUtil.ToStorApiStatus(b); storApiStatus.internalIntData = (int)b; Logger.Warn("MV_LD_GetConfig failed: {0}", new object[] { b }); return(storApiStatus); } string @string = Encoding.ASCII.GetString(ld_Config_Request.ldConfig[0].Name); create_LD_Param.LDID = this.MvId; create_LD_Param.RaidMode = MarvellUtil.ToMarvellRaidLevel(newLevel); create_LD_Param.RoundingScheme = 0; create_LD_Param.InitializationOption = 0; create_LD_Param.HDIDs = new short[128]; foreach (Drive drive in this.drives) { if (num >= 128) { storApiStatus = StorApiStatusEnum.STOR_INVALID_PARAM; return(storApiStatus); } create_LD_Param.HDIDs[num] = ((MarvellDrive)drive).MvId; num++; } foreach (Drive drive2 in newDrives) { if (num >= 128) { storApiStatus = StorApiStatusEnum.STOR_INVALID_PARAM; return(storApiStatus); } create_LD_Param.HDIDs[num] = ((MarvellDrive)drive2).MvId; num++; } create_LD_Param.HDCount = (byte)num; create_LD_Param.Name = new byte[16]; ld_Config_Request.ldConfig[0].Name.CopyTo(create_LD_Param.Name, 0); Logger.Debug("Migrate parameter: LD={0}, RAID={1}, HDCount={2}, HD={3}, Name={4}", new object[] { create_LD_Param.LDID, create_LD_Param.RaidMode, create_LD_Param.HDCount, string.Join <short>(" ", create_LD_Param.HDIDs.ToList <short>().GetRange(0, (int)create_LD_Param.HDCount)), @string }); try { b = MvApi.MvApi.MV_LD_StartMigration(((MarvellController)this.controller).AdapterId, ref create_LD_Param); } catch (Exception ex2) { Logger.Warn("MV_LD_StartMigration exception: {0}", new object[] { ex2 }); return(StorApiStatusEnum.STOR_API_ERROR); } if (b != 0) { storApiStatus = MarvellUtil.ToStorApiStatus(b); storApiStatus.internalIntData = (int)b; Logger.Warn("MV_LD_StartMigration failed: {0}", new object[] { b }); } } return(storApiStatus); }